Zit met het volgende probleem:

Stel de volgende tabel

id bakkerid broodid
1 1 6
2 1 7
3 2 6
4 2 8

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.
ok, ik denk dat het nu duidelijker is, bedankt.

Maw er is geen oplossing voor dit probleem?

Dan zal ik eens moeten kijken of ik de structuur van de databank kan aanpassen zodat ik wel de juiste informatie eruit kan halen.
Hoezo volgens mij klopt jouw datamodel juist een keer wel
waarom neit zo?:

SELECT * FROM bakkers WHERE brood = 'zoekterm'
?
en bij meerdere zoektermen meerdere ANDs erbij?

<?php
$query = "SELECT bakkerid FROM bakkers WHERE brood = '".$zoekterm[0]."'";
foreach($zoekterm as $value) {
if($value != $zoekterm[0]) {
$query .= " AND brood = '".$value."'";
}
}
?>
Moet makkelijker kunnen, maar dit kon ik snel ff verzinen.
@ niek:
helaas werkt het zo niet. Hij gaat per record kijken en per record heeft een bakker maar 1 type brood. Voorbeeld:
SELECT * FROM bakkers WHERE brood = 6 and brood = 7
Zie je het probleem?

@ Klaasjan:
Maar wat als de gebruiker maar 1 type brood opgeeft? Dan werkt de query dus niet.
En zie ook het probleem in de post van 14u40. Als ik 3 types brood opgeeft, werkt het ook niet.
Ja wel dan moet HAVING COUNT > 0 zijn.
Ok, dat werktµ met 1 broodid in de set.

Maar het probleem van gisteren van 14u40 (zie hierboven) blijft nog altijd.

Als ik de 3 types (6,7,8) zou ik enkel bakkerid 1 moeten krijgen, maar ik krijg zowel bakkerid 1 als 2.

Dus ik vrees dat er toch nog ergens een probleem in de query zit...
Ik los het voorlopig als volgt op:

SELECT bakker_id
FROM bakkers
WHERE bakker_id IN (
SELECT bakker_id FROM bakkers WHERE brood_id = 6
)
AND bakker_id IN (
SELECT bakker_id FROM bakkers WHERE brood_id = 7
)
GROUP BY bakker_id

waarbij ik een extra geneste query toevoeg voor elke type van brood dat gezocht wordt.
Als er iemand een betere of andere oplossing vindt, altijd welkom! Alleszins bedankt voor de hulp iedereen!

Reageren