Queries verwerken in een class
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)
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
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/>' ;
}
}
?>
$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
Gewijzigd op 01/02/2012 13:38:28 door Reshad F
Code (php)
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
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' ];
}
}
?>
/**
* 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' ];
}
}
?>
Doe maar eens een EXPLAIN op de volgende queries, en je zult het verschil zien.
Code (php)
1
2
3
2
3
SELECT id, title
FROM x61ys_categories
WHERE parent_id IN (SELECT id FROM x61ys_categories WHERE title ='Huizen')
FROM x61ys_categories
WHERE parent_id IN (SELECT id FROM x61ys_categories WHERE title ='Huizen')
of
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)
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
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;
}
}
?>
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