$sql1 = mysql_query("SELECT fiets_id FROM fietsen WHERE onderdeel_id IN (1, 2, 10000) GROUP BY fiets_id;");
while($row = mysql_fetch_array($sql1)) {
echo "$row[fiets_id]<br/>";
}
$sql1=mysql_query("SELECT fiets_id FROM fietsen WHERE onderdeel_id IN (1, 2, 10000) GROUP BY fiets_id;");
Dan is die IN niet meer juist want je wil alleen fiets_id 1 en niet 3.
Edit:
Daarom dat ik al zei dat het niet helemaal juist is. Je gebruikt IN, vanaf dat er een fiets_id is met een onderdeel_id dat in de meegegeven mogelijkheden valt krijg je een ID terug. Daarom dat IN niet helemaal juist is.
SELECT DISTINCT fiets_id
FROM fietsen f
HAVING (
SELECT COUNT(*) FROM fietsen x WHERE x.onderdeel_id IN(1,2,5) AND x.fiets_id = f.fiets_id )
>= 3
SELECT DISTINCT fiets_id
FROM fietsen f
HAVING (
SELECT COUNT(*) FROM fietsen x WHERE x.onderdeel_id IN(1,2,5) AND x.fiets_id = f.fiets_id )
>=3
De 3 representeert het aantal onderdelen (in je array o.i.d.) dat kun je wel met php uitlezen.
Ik heb diverse dingen geprobeerd en ik weet ook niet zeker of dit wel compatibele is met een grotere tabel, maar voor je voorbeeldtabel werkt het zeker ;).
$sql2 = mysql_query("SELECT DISTINCT g.naam
FROM fietsen f, fiets g
HAVING (
SELECT COUNT(*) FROM fietsen x WHERE x.onderdeel_id IN($zoek) AND x.fiets_id = f.fiets_id AND g.fiets_id = x.fiets_id) >= $aantal;");
while($row = mysql_fetch_array($sql2)) {
echo "$row[naam]<br/>";
}
als je in je code alle onderdelen van fiets 1 nodig hebt, dan kijk je welke onderdelen er bij horen, die staan in tabel 3. In dit geval is dat 2 en 3, dan de onderdelen ophalen uit tabel 1.
Dat is niet omslachtig maar het omgekeerde van wat hij nodig heeft. Wat jij voorstelt is correct als je op basis van fietsId de onderdelen gaat ophalen. Hij moet op basis van de onderdelen een fietsId ophalen. Snap je?
Je query is zo traag omdat het een subquery betreft (query in query). Ik denk dat je er niks aan kunt doen, of je moet kijken naar een andere oplossing van je probleem bijvoorbeeld.
Je query is overigens nog fout mijn inziens:
AND g.fiets_id = x.fiets_id
Dat hoort _buiten_ de subquery. Je doet namelijk een JOIN, en dit is beetje vreemd zoals hij nu is opgezet. En het feit dat de naam van de fiets in een andere tabel staat vind ik beetje raar, maar dat zal ik dan wel verkeerd interpreteren.
SELECT DISTINCT f.fiets_id, g.fiets
FROM fietsen f JOIN fiets g ON f.fiets_id = g.fiets_id
HAVING (
SELECT COUNT(*) FROM fietsen x WHERE x.onderdeel_id IN(1,2,5) AND x.fiets_id = f.fiets_id )
>= 3
SELECTDISTINCT f.fiets_id, g.fiets
FROM fietsen f JOIN fiets g ON f.fiets_id = g.fiets_id
HAVING(
SELECT COUNT(*)FROM fietsen x WHERE x.onderdeel_id IN(1,2,5)AND x.fiets_id = f.fiets_id )