Queries verwerken in een class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jelte Veld

Jelte Veld

01/02/2012 13:20:39
Quote Anchor link
Dag allemaal,

Inleiding
Dit is mijn eerste post hier op het forum. Ik ben sinds kort bezig met classes en probeer het OOP verhaal me eigen te maken. Het kan dus zijn dat ik niet altijd de juiste vragen stel, maar corrigeer me daarin gewoon. Ik leer graag bij.

Wat ik al heb...
Ik heb zojuist twee leuke queries gemaakt. De eerste query levert me de naam van een categorie en een id op. Het id gebruik ik in de volgende query en de naam echo ik. Vervolgens echo ik de info verkregen uit de tweede query.

De vraag
Het werk allemaal heel leuk, maar ik wil dit netjes in een class verwerken zodat ik het in de toekomst gemakkelijker kan gebruiken en uitbreiden. De vraag is hoe doe ik dat op de juiste manier.

Alle suggesties en tips zijn welkom.

Het stukje script tot dusver:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php

$plaats
= 'Huizen';

// kijken welke categoriën er onder de opgegeven plaats vallen

$res_categorie = mysql_query("
SELECT id, title
FROM x61ys_categories
WHERE parent_id IN (SELECT id FROM x61ys_categories WHERE title ='$plaats')
"
) or die(mysql_error()) ;

while ($row1 = mysql_fetch_array($res_categorie)) {

$cat_naam = $row1['title'] ;
$cat_id = $row1['id'] ;

echo '<h2>' . $cat_naam . '</h2>' ;

// De personen per categorie ophalen

$res_item = mysql_query("
SELECT text, picture
FROM x61ys_simplelists_items
WHERE id IN (SELECT id FROM x61ys_simplelists_categories WHERE category_id ='$cat_id')
"
) or die(mysql_error()) ;

while ($row = mysql_fetch_array($res_item)) {

echo $row['picture'] . '<br/>' ;
echo $row['text'] . '<br/>' ;

}
}


?>
Gewijzigd op 01/02/2012 14:54:15 door Jelte Veld
 
PHP hulp

PHP hulp

24/12/2024 00:09:46
 
Reshad F

Reshad F

01/02/2012 13:37:45
Quote Anchor link
wil je je code even tussen [\code]\ [\/code]\ tags zetten zonder \
Gewijzigd op 01/02/2012 13:38:28 door Reshad F
 
Peter Dorn

Peter Dorn

01/02/2012 13:46:51
Quote Anchor link
Stukje code, niet getest:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php

/**
 * Category model
 */

class CategoryModel
{
    /**
     * Categorieën ophalen voor een stad
     * @param string $city
     * @throws Exception
     * @return ArrayObject
     */

    public function getByCity( $city )
    {

        // Query opbouwen
        $query = 'select id, title
            from x61ys_categories
            where parent_id in (
                select id from x61ys_categories where title = "'
. mysql_real_escape_string( $plaats ) . '"
            )
        '
;
        
        // Query uitvoeren
        $result = mysql_query( $query );
        
        // Kijken of query is gelukt.
        if ( !$result )
        {

            // Query fout, throw exception
            throw new Exception( 'Error while fetch categories by city' );
        }

        
        // Bij geen resultaat, null returnen
        if ( !mysql_num_rows( $result ) )
        {

            return null;
        }

        
        // Return object opbouwen
        $return = new ArrayObject();
        while ( $row = mysql_fetch_assoc( $result ) )
        {

            $return -> append( $row );
        }

        
        // Geheugen vrij maken en resultaat returnen
        mysql_free_result( $result );
        return $return;
    }
}


// Voorbeeld code
$model = new CategoryModel();
$objects = $model -> getByCity( 'Huizen' );

if ( $objects )
{

    foreach ( $objects as $object )
    {

        echo 'Categorie naam: ' . $object[ 'title' ];
    }
}


?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

01/02/2012 14:19:58
Quote Anchor link
Je query's zijn verre van optimaal
Doe maar eens een EXPLAIN op de volgende queries, en je zult het verschil zien.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT id, title
FROM x61ys_categories
WHERE parent_id IN (SELECT id FROM x61ys_categories WHERE title ='Huizen')

of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT t1.id, t1.title
FROM x61ys_categories t1
INNER JOIN
    x61ys_categories t2
ON
    t1.id = t2.parent_id AND t2.title = 'Huizen'
 
Jelte Veld

Jelte Veld

01/02/2012 14:52:34
Quote Anchor link
Hoi Peter,

Helemaal top! Ik hoefde alleen maar de var $plaats in de functie te vervangen door $city en het werkte. Maar nu krijg ik alleen de categorie titel / id. Ik wil natuurlijk ook de 2e Query toevoegen aan de functie. Nu heb ik jouw code alweer goed weten te verpesten, maar ik denk dat ik het nog niet helemaal begrijp. Ik vraag niet direct om de code, maar wat tips zijn welkom waarom onderstaand script niet werkt. Let op ik probeer hier wat van te leren ;-)

Aangepaste code

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
class medewerkers
{
    /**
     * Categorieën ophalen voor een stad
     * @param string $city
     * @throws Exception
     * @return ArrayObject
     */

    public function medewerkers_plaats($city)
    {

        // Query opbouwen
        $query = 'select id, title
            from x61ys_categories
            where parent_id in (select id from x61ys_categories where title = "'
. mysql_real_escape_string($city) . '")
        '
;
        
        // Query uitvoeren
        $result = mysql_query($query);
        
        // Kijken of query is gelukt.
        if (!$result)
        {

            // Query fout, throw exception
            throw new Exception( 'Error while fetch categories by city' );
        }

        
        // Bij geen resultaat, null returnen
        if ( !mysql_num_rows($result) )
        {

            return null;
        }

        
        // Return object opbouwen
        $return = new ArrayObject();
        while ($row = mysql_fetch_assoc($result) )
        {

            
            $id = $row['id'] ;
        
            $query1 = ='SELECT text, picture
            FROM x61ys_simplelists_items
            WHERE id IN (SELECT id FROM x61ys_simplelists_categories WHERE category_id ="'
. $id . '")';
            
            $result1 = mysql_query($query1) ;
            
            if (!$result)
            {

            // Query fout, throw exception
            throw new Exception( 'Error while fetch employes by categorie' );
            }

            
            // Bij geen resultaat, null returnen
            if ( !mysql_num_rows($result1) )
            {

            return null;
            }

            
            // Return object opbouwen
            $return = new ArrayObject();
            while ($row1 = mysql_fetch_assoc($result1) )
               {

            
            $return ->append($row1);
            
            }
            
        }

        
        
        
        // Geheugen vrij maken en resultaat returnen
        mysql_free_result($result1);
        return $return;
    }
}

?>
Gewijzigd op 01/02/2012 14:53:45 door Jelte Veld
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.