Deze tabel geeft aan welke bakker welk type van brood verkoopt. Daarnaast heb ik nog 2 andere tabellen met meer info over de bakkers en meer info over de types brood
Ik wil uit deze tabel alle bakkers halen die broodtype 6 en 7 verkopen. Alleen bakker 1 voldoet hieraan, want bakker 2 verkoopt brood 7 niet.
Hoe kan ik dit met een SQL query te weten komen? Het lijkt eenvoudig, maar ik geraak er niet aan uit...
Hou er rekening mee dat er tientallen types brood kunnen zijn waarvoor een bakker gevonden moet worden.
De eerste tabel, met unieke ids, is niet noodzakelijk, dus die kan weg als dat helpt.
Aanvulling: om fouten te voorkomen zou ik eisen dan de combi bakkerid - broodid UNIQUE moet zijn, anders kan de query van Klaasjan toch verkeerde resultaten geven.
sorry voor het late antwoord (onverwacht weekendje zonder internet)
OK, bedankt Jan en Klaasjan, met die laatste tip (distinct weglaten) lukt het idd.
Maar ik denk niet dat ik de query goed begrijp. Kan je 'm eens in woorden uitleggen? Waarom die laatste 'group by' en 'having' ?
Ook werkt het hier nog niet helemaal... Als er maar op 1 type brood gezocht wordt, maw er zit maar 1 id in de 'in-set', dan worden er geen resultaten gevonden... ?
newbie als ik ben. Je vraagt het bakkers id op die brood verkoopt van type 6 7 of 8. Volgens mij is het dan logisch dat bakker 2 er tussen staan omdat die ook het brood type 8 verkoopt. Dus bakker 1 en 2 staan in de uitvoer.
Zodra bakekr 2 geen brood van type 8 meer verkoopt zal die er ook niet meer bij staan in de uitvoer.
Je kijkt met de IN of hij een van de waarden heeft dus OF 6 OF 7 OF 8.
In reactie op je eerdere vraag:
GROUP BY en HAVING zijn volgens mij de lastigste dingetjes uit SQL
Als je zelf een veld 'maakt' of 'berekend' kan je die niet in de WHERE conditie gebruiken. Dan zal je met HAVING aan de gang moeten. En zoals je snapt moet je dan ook altijd GROUP BY gebruiken.
voorbeeld
SELECT fruit FROM tabel WHERE kleur = groen
Dat zal bijv appel en peer geven.
<?php
"SELECT
COUNT(fruit) // aantal soorten
FROM
tabel
WHERE kleur = groen // zal 2 opleveren
GROUP BY fruit // je wil maar een resultaat namelijk een aantal
HAVING COUNT(fruit) > 2" // dit getal bereken jezelf en zit niet in de DB dus HAVING gebruiken
?>
DIT zal 2 opleveren
Ook werkt het hier nog niet helemaal... Als er maar op 1 type brood gezocht wordt, maw er zit maar 1 id in de 'in-set', dan worden er geen resultaten gevonden... ?......
Dat klopt want hij wil 2 X het bakkerid vinden dus hij moet minimaal vinden