Parent & Childs
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$i = 0;
$query3 = mysql_query("select * from $categorietab,$lijsttab WHERE categorie_id=cat_id AND lijst_user_id=$zaakid GROUP BY categorie_id");
while ($categorienaam = mysql_fetch_assoc($query3)) {
$categorieid[$i] = $categorienaam;
$i++;
$sql="select * from $lijsttab,$artikeltab,$usertab,$categorietab,$artikelextratab WHERE categorie_id='".$categorieid."' AND lijst_user_id=user_id AND lijst_artikel_id=artikel_id AND categorie_id=cat_id AND lijst_extraitem_id=extra_id GROUP BY lijst_artikel_id";
$query2 = mysql_query($sql);
while ($brood = mysql_fetch_assoc($query2)) {
$belegdebrood[$i] = $brood;
$i++;
}
}
$query3 = mysql_query("select * from $categorietab,$lijsttab WHERE categorie_id=cat_id AND lijst_user_id=$zaakid GROUP BY categorie_id");
while ($categorienaam = mysql_fetch_assoc($query3)) {
$categorieid[$i] = $categorienaam;
$i++;
$sql="select * from $lijsttab,$artikeltab,$usertab,$categorietab,$artikelextratab WHERE categorie_id='".$categorieid."' AND lijst_user_id=user_id AND lijst_artikel_id=artikel_id AND categorie_id=cat_id AND lijst_extraitem_id=extra_id GROUP BY lijst_artikel_id";
$query2 = mysql_query($sql);
while ($brood = mysql_fetch_assoc($query2)) {
$belegdebrood[$i] = $brood;
$i++;
}
}
Het tonen van Bedrijfsnaam onder elkaar gaat het goed..alleen er wordt geen artikelen eraan gekoppeld. De database is genormaliseerd. De probleem ligt in het opvragen van categorieid.
De bedoeling dat het zo eruit moeten zien:
Bedrijfsnaam:
Artikel 1 | Aantal | Prijs
Artikel 2 | Aantal | Prijs
etc..
Bedrijfsnaam 1:
Artikel 1 | Aantal | Prijs
Artikel 2 | Aantal | Prijs
etc..
Volgens mij zijn dit ook geen variabelen die je gebruikt, maar zijn dit gelijk je kollom namen, dus haal de dollartekens weg.
Verder raad ik aan om een join te gebruiken, zodat je maar 1 sql query hoeft te maken.
Ik kan dit niet voor je doen, aangezien ik je database structuur niet ken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$i = 0;
$sql = "SELECT r.*, rb.*,a.* FROM $categorietab AS r INNER JOIN ($lijsttab AS rb INNER JOIN $artikeltab AS a ON a.artikel_id = rb.lijst_artikel_id) ON rb.categorie_id = r.cat_id AND rb.lijst_user_id=$zaakid ORDER BY r.cat_id";
echo $sql;
$query = mysql_query($sql);
while ($rij = mysql_fetch_assoc($query)) {
$categorieid[$i] = $rij;
$i++;
}
$_SESSION['zaakid'] = $zaakid;
$smarty->assign('categorieid', $categorieid);
$smarty->assign('belegdebrood', $belegdebrood);
$sql = "SELECT r.*, rb.*,a.* FROM $categorietab AS r INNER JOIN ($lijsttab AS rb INNER JOIN $artikeltab AS a ON a.artikel_id = rb.lijst_artikel_id) ON rb.categorie_id = r.cat_id AND rb.lijst_user_id=$zaakid ORDER BY r.cat_id";
echo $sql;
$query = mysql_query($sql);
while ($rij = mysql_fetch_assoc($query)) {
$categorieid[$i] = $rij;
$i++;
}
$_SESSION['zaakid'] = $zaakid;
$smarty->assign('categorieid', $categorieid);
$smarty->assign('belegdebrood', $belegdebrood);
Zowiezo is je select query:
r.*
rb.*
a.*
niet erg handig. Het is sneller, en netter om expliciet de kolommen die je wil hebben te vragen.
Verder zijn de variabelen in je query erg lelijk en potentieel onveilig.
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
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
$sql = "
SELECT
r . cat_id,
r . cat_titel,
rb . lijst_user_id,
rb . lijst_artikel_id,
rb . lijst_extraitem_id,
rb . lijst_prijs,
a . artikel_id,
a . artikel_titel,
ae . extra_id,
ae . extra_titel
FROM categorie AS r
INNER JOIN (
bestellijstje AS rb
INNER JOIN artikel AS a ON a.artikel_id = rb.lijst_artikel_id
INNER JOIN artikel_extra AS ae ON ae.extra_id = rb.lijst_extraitem_id
) ON rb.categorie_id = r.cat_id
AND rb.lijst_user_id =1
GROUP BY rb.lijst_artikel_id, rb.categorie_id
";
// echo $sql;
$query = mysql_query($sql);
while ($rij = mysql_fetch_assoc($query)) {
$categorieid[$i] = $rij;
$i++;
}
$_SESSION['zaakid'] = $zaakid;
$smarty->assign('categorieid', $categorieid);
SELECT
r . cat_id,
r . cat_titel,
rb . lijst_user_id,
rb . lijst_artikel_id,
rb . lijst_extraitem_id,
rb . lijst_prijs,
a . artikel_id,
a . artikel_titel,
ae . extra_id,
ae . extra_titel
FROM categorie AS r
INNER JOIN (
bestellijstje AS rb
INNER JOIN artikel AS a ON a.artikel_id = rb.lijst_artikel_id
INNER JOIN artikel_extra AS ae ON ae.extra_id = rb.lijst_extraitem_id
) ON rb.categorie_id = r.cat_id
AND rb.lijst_user_id =1
GROUP BY rb.lijst_artikel_id, rb.categorie_id
";
// echo $sql;
$query = mysql_query($sql);
while ($rij = mysql_fetch_assoc($query)) {
$categorieid[$i] = $rij;
$i++;
}
$_SESSION['zaakid'] = $zaakid;
$smarty->assign('categorieid', $categorieid);
Krijg wel alle informatie die ik nodig hebt, maar de categorie wordt op elk regels getoond, terwijl ik aan 1 genoeg hebt.
categorie:
cat_id int(11)
cat_titel varchar(255)
bestellijstje:
lijst_id int(11)
lijst_user_id int(11)
lijst_prijs varchar(50)
lijst_artikel_id int(11)
lijst_extraitem_id int(11)
categorie_id int(11)
artikel:
artikel_id int(11)
artikel_titel varchar(255)
artikel_extra:
extra_id int(11)
extra_titel varchar(255)
En de user is de bekende usertabel met daarin user_id en user_login.
Even een tip. Probeer vanaf het begin altijd met goeie naamgevingen te werken. Eerst werkend maken en achteraf alles aanpassen is zoiezo dubbel werk, en word meestal niet gedaan. Zogauw het werkt wil je verder met het volgende.
Wel weet ik dat ik meer moeten leren over JOIN.
@Arend: Je schreef: potentieel onveilig.
Leg eens uit..waarom is het onveilig. De bedoeling is dat ik dit juist moeten leren om alles veilig te zijn.
Ik denk dat hij voornamelijk bedoeld dat je met dit soort onduidelijke variabelen snel de mist in kan gaan. En dus snel fouten maakt.
Je controleert ook nergens of je query is gelukt.
Dat mag je zeggen. Die catch viel me helemaal niet op
Kun je je oplossing misschien ook met de andere lezers delen? Misschien handig voor problemen in de toekomst :-).
Ik controleer wel altijd op query door echoën, af en toe haal ik dat weg als ik bericht gaat plaatsen.
Voor deze oplossing had ik ander oplossing dat het ook goed werkt..alleen wordt het praktisch onhandig als je ieder keer nieuw categorie moeten toevoegen. Vandaar ik op deze idee kwam om parent/child methode te gebruiken.
Het kan best zijn dat soms iemand vastzit..door de hulp van medeprogrammeurs komt het altijd goed.
Jezpur schreef op 14.07.2008 20:12:
Kun je je oplossing misschien ook met de andere lezers delen? Misschien handig voor problemen in de toekomst :-).
Mag altijd..door medeprogrammeur hier op de forum Spike, die ook lid is van Smarty forum heeft voor mij grootste gedeelte oplossing opgelost.
Deze oplossing werkt alleen met Smarty template..de php code kan door iedereen wel gebruiken.
php 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
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
$sql = "
SELECT
r . cat_id,
r . cat_titel,
rb . lijst_user_id,
rb . lijst_artikel_id,
rb . lijst_extraitem_id,
rb . lijst_prijs,
rb . categorie_id,
a . artikel_id,
a . artikel_titel,
ae . extra_id,
ae . extra_titel
FROM categorie AS r
INNER JOIN (
bestellijstje AS rb
INNER JOIN artikel AS a ON a.artikel_id = rb.lijst_artikel_id
INNER JOIN artikel_extra AS ae ON ae.extra_id = rb.lijst_extraitem_id
) ON rb.categorie_id = r.cat_id
AND rb.lijst_user_id =$zaakid
GROUP BY rb.lijst_artikel_id, rb.categorie_id
";
$query = mysql_query($sql);
while ($rij = mysql_fetch_assoc($query)) {
$categorieid[$i] = $rij;
$i++;
}
$_SESSION['zaakid'] = $zaakid;
$smarty->assign('categorieid', $categorieid);
$smarty->assign('category', $category);
SELECT
r . cat_id,
r . cat_titel,
rb . lijst_user_id,
rb . lijst_artikel_id,
rb . lijst_extraitem_id,
rb . lijst_prijs,
rb . categorie_id,
a . artikel_id,
a . artikel_titel,
ae . extra_id,
ae . extra_titel
FROM categorie AS r
INNER JOIN (
bestellijstje AS rb
INNER JOIN artikel AS a ON a.artikel_id = rb.lijst_artikel_id
INNER JOIN artikel_extra AS ae ON ae.extra_id = rb.lijst_extraitem_id
) ON rb.categorie_id = r.cat_id
AND rb.lijst_user_id =$zaakid
GROUP BY rb.lijst_artikel_id, rb.categorie_id
";
$query = mysql_query($sql);
while ($rij = mysql_fetch_assoc($query)) {
$categorieid[$i] = $rij;
$i++;
}
$_SESSION['zaakid'] = $zaakid;
$smarty->assign('categorieid', $categorieid);
$smarty->assign('category', $category);
Smarty template
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
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
{assign var=category value=""}
<table border=0 width=100% cellspacing=2 cellpadding=2>
{foreach item=auct_det from=$categorieid}
{if $category != $auct_det.cat_titel}
{assign var=category value=$auct_det.cat_titel}
<tr>
<td colspan="3">
<div style="font-size:13px; font-weight:bold; color: #ff0000">
<b>{$auct_det.cat_titel|capitalize}</b>
</div>
</td>
</tr>
{/if}
<tr>
<td>
<a href="index.php?q=bestel&id={$auct_det.artikel_id}">{$auct_det.artikel_titel}</a>
</td>
<td valign=top>
<a href="index.php?q=bestel&id={$auct_det.artikel_id}">Bestellen</a>
</td>
<td valign=top>
<b>€ {$auct_det.lijst_prijs}</b>
</td>
</tr>
{/foreach}
</table>
<table border=0 width=100% cellspacing=2 cellpadding=2>
{foreach item=auct_det from=$categorieid}
{if $category != $auct_det.cat_titel}
{assign var=category value=$auct_det.cat_titel}
<tr>
<td colspan="3">
<div style="font-size:13px; font-weight:bold; color: #ff0000">
<b>{$auct_det.cat_titel|capitalize}</b>
</div>
</td>
</tr>
{/if}
<tr>
<td>
<a href="index.php?q=bestel&id={$auct_det.artikel_id}">{$auct_det.artikel_titel}</a>
</td>
<td valign=top>
<a href="index.php?q=bestel&id={$auct_det.artikel_id}">Bestellen</a>
</td>
<td valign=top>
<b>€ {$auct_det.lijst_prijs}</b>
</td>
</tr>
{/foreach}
</table>