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:


<?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/>' ;

}
}

?>
wil je je code even tussen [\code]\ [\/code]\ tags zetten zonder \
Stukje code, niet getest:

<?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' ];
}
}

?>
Je query's zijn verre van optimaal
Doe maar eens een EXPLAIN op de volgende queries, en je zult het verschil zien.

SELECT id, title
FROM x61ys_categories
WHERE parent_id IN (SELECT id FROM x61ys_categories WHERE title ='Huizen')

of

SELECT t1.id, t1.title
FROM x61ys_categories t1
INNER JOIN
	x61ys_categories t2
ON
	t1.id = t2.parent_id AND t2.title = 'Huizen'
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


<?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;
    }
}
?>

Reageren