Keuze lijst categorie zonder subcategorie
Op dit formulier heb ik een keuzelijst gezet.
Door het script wat ik heb gemaakt worden de categorienaam met daarachter de subcategorieën weergegeven.
Maar als een categorie géén subcategorie heeft wordt hij helemaal niet weergegeven. Ik weet wel hoe dat komt maar ik weet de oplossing niet.
Wie helpt me hiermee?
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$query = "
SELECT
c.cat_naam,
s.sub_naam
FROM categorie AS c
JOIN
subcategorie AS s
ON c.cat_id = s.cat_id
GROUP BY s.sub_naam
ORDER BY c.cat_naam";
$result = mysql_query($query) or die ("Sorry maar ik kan de categorieën niet weergeven");
?>
<select name="categorie">
<?php
while($row = mysql_fetch_object($result)){
?>
<option value="<?php echo $categorie; ?>"><?php echo $row->cat_naam.' -> '.$row->sub_naam ; ?></option>
<?php
}
?>
</select>
$query = "
SELECT
c.cat_naam,
s.sub_naam
FROM categorie AS c
JOIN
subcategorie AS s
ON c.cat_id = s.cat_id
GROUP BY s.sub_naam
ORDER BY c.cat_naam";
$result = mysql_query($query) or die ("Sorry maar ik kan de categorieën niet weergeven");
?>
<select name="categorie">
<?php
while($row = mysql_fetch_object($result)){
?>
<option value="<?php echo $categorie; ?>"><?php echo $row->cat_naam.' -> '.$row->sub_naam ; ?></option>
<?php
}
?>
</select>
Als er niks is bij subcategorie dan geeft die query toch ook niks.
Het menu heeft 26 items waarvan er misschien 3 geen submenu items hebben.
Hij geeft dus netjes weer: auto -> algemeen
Maar bv. hobby heeft geen subcategorie en dus geeft hij hobby helemaal niet weer in het keuzelijstje.
Elsy schreef op 27.02.2007 13:37:
Het menu heeft 26 items waarvan er misschien 3 geen submenu items hebben.
Ik bedoel niet helemaal niks, maar bij dit voorbeeld krijg je toch slechts 23 resultaten?
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
Maar hoe laat ik in diezelfde query dan de onderwerpen zien die geen subitem hebben.
Ik heb zelf nog nooit met join gewerkt. Maar ik denk dat die join er dan uit moet, alleen ik weet niet of het dan nog goed gaat. Misschien dat een van onze andere forumleden hier meer kennis van heeft.
Volgens mij heeft het niet met die join te maken, maar haal die GROUP BY s.sub_naam eens weg ;) Denk dat dat al moet helpen.
Dus niet.....er is geen verschil in de uitvoer.
Nog steeds laat hij bv. hobby of kantoorartikelen niet zien in het lijstje.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$query = "
SELECT
c.cat_naam,
s.sub_naam
FROM categorie AS c
LEFT JOIN
subcategorie AS s
ON c.cat_id = s.cat_id
ORDER BY c.cat_naam";
$result = mysql_query($query) or die ("Sorry maar ik kan de categorieën niet weergeven");
?>
<select name="categorie">
<?php
while($row = mysql_fetch_object($result)){
?>
<option value="<?php echo $categorie; ?>"><?php echo $row->cat_naam.' -> '.$row->sub_naam ; ?></option>
<?php
}
?>
</select>
$query = "
SELECT
c.cat_naam,
s.sub_naam
FROM categorie AS c
LEFT JOIN
subcategorie AS s
ON c.cat_id = s.cat_id
ORDER BY c.cat_naam";
$result = mysql_query($query) or die ("Sorry maar ik kan de categorieën niet weergeven");
?>
<select name="categorie">
<?php
while($row = mysql_fetch_object($result)){
?>
<option value="<?php echo $categorie; ?>"><?php echo $row->cat_naam.' -> '.$row->sub_naam ; ?></option>
<?php
}
?>
</select>
En zo dan?
Edit:
SanThe, ik denk dat je deze informatie dan wel leuk vind, is een tutorial waarin verschillende jointypes worden uitgelegd. 't is niet zo moeilijk, en de mogelijkheden met SQL tabellen worden vergroot, als je het vergelijkt met de standaard query's.
http://www.tizag.com/mysqlTutorial/mysqljoins.php
SanThe, ik denk dat je deze informatie dan wel leuk vind, is een tutorial waarin verschillende jointypes worden uitgelegd. 't is niet zo moeilijk, en de mogelijkheden met SQL tabellen worden vergroot, als je het vergelijkt met de standaard query's.
http://www.tizag.com/mysqlTutorial/mysqljoins.php
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Ze zijn hierdoor gekoppeld. Geen koppeling dan ook geen resultaat.
Dat was hem! Die LEFT JOIN
Ben nog niet zo lang bezig met dat JOINEN best wel lastig.
Bedankt!!
@Elsy: Het zijn ook de sixties niet meer. ;-) Succes verder.
SanThe schreef op 27.02.2007 14:03:
ON c.cat_id = s.cat_id
Ze zijn hierdoor gekoppeld. Geen koppeling dan ook geen resultaat.
Ze zijn hierdoor gekoppeld. Geen koppeling dan ook geen resultaat.
Jawel, daarvoor is de LEFT JOIN (zie ook Elsy haar enthousiaste reactie) in het leven geroepen. Lees de tut maar een (de JOIN en LEFT JOIN worden daar behandeld), misschien heb je er voor jezelf ook nog wel wat aan.
Edit:
Beetje te laat, je had het al ontdekt zie ik. Succes met die link ;)
Beetje te laat, je had het al ontdekt zie ik. Succes met die link ;)
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Bedankt voor de link, is duidelijk uitgelegd.
Dit wil zeggen dat er alleen resultaat is wanneer de kolom1 in beide tabellen voorkomt.
Dan heb je de LEFT JOIN, voor deze toelichting moet ik wel even noemen dat deze uitgaat van de 1st genoemde tabel bij de ON. Bijv in die van Elsy de tabel categorie.
Elke Subcategorie heeft een categorie, dus in de LEFT JOIN krijg je alle subcategoriën die een categorie hebben + Alle categorieën.
Bij de RIGHT JOIN werkt het precies andersom, en in het voorbeeld van Elsy gaat die dan op zoek naar de categorieën die voorkomen in de subcategorie tabel. Omdat niet alle categorieën subcategorieën onder zich hebben staan, zal het resultaat dus niet alle categoriën bevatten.
(hopelijk is dit duidelijk, ff zoeken hier, tussen de tuts, anders maak ik er nog ff een tutorial van denk 'k)
@Robert: Zeer duidelijk. Bedankt.