multiple id's vergelijken in MySQL
OptID - OptNaam - Parent
1 - EDR - 2
2 - EDL - 2
3 - DDR - 2
4 - DDL - 2
5 - ETR - 2
6 - ETL - 2
enzovoorts...
daarnaast een tabel OptieEigenschappen
OptID - EigenschapID - Eigenschap
1 - 1 - deur
1 - 8 - enkel
1 - 11 - rechts
1 - 13 - duwend
2 - 1 - deur
2 - 8 - enkel
2 - 10 - links
2 - 13 - duwend
enzovoort....
Nu wil ik met een query die deur naar boven halen die aan alle voorwaarden voldoet.
Bijvoorbeeld Haal de opties voor parent_id 2 met eigenschappen 1,8,10,13.
Dit is een probleem.
Het joinen van de tabellen gaat prima, de parent is ook geen probleem, maar hoe krijg ik de optie die aan alle eigenschappen voldoet?
Als je stelt: WHERE Eigenschap_id IN (1,8,10,13) krijg je alle opties waar 1 van die eigenschappen in voorkomt. Dus teveel.
Als je stelt: WHERE Eigenschap_id = 1 AND Eigenschap_id = 8, krijg je niets, want geen enkel record in de tabel Eigenschappen heeft meerdere Eigenschap_id's.....
Ik wordt er een beetje wanhopig van :-(
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$haalOptions = "SELECT conf_SysOptions.Opt_ID, Parent_ID, Opt_Value, conf_SysOpt_HasAtt.SysOpt_Attributes_Att_ID
FROM conf_SysOptions
INNER JOIN conf_SysOpt_HasAtt
ON conf_SysOptions.Opt_ID = conf_SysOpt_HasAtt.SysOptions_Opt_ID
WHERE Parent_ID = ".$ParentsTab['Par_ID']."
AND conf_SysOpt_HasAtt.SysOpt_Attributes_Att_ID IN (".$cc_list.")
FROM conf_SysOptions
INNER JOIN conf_SysOpt_HasAtt
ON conf_SysOptions.Opt_ID = conf_SysOpt_HasAtt.SysOptions_Opt_ID
WHERE Parent_ID = ".$ParentsTab['Par_ID']."
AND conf_SysOpt_HasAtt.SysOpt_Attributes_Att_ID IN (".$cc_list.")
Het is het proberen waard om te kijken naar loops, waar je een cursor kunt gebruiken.
http://dev.mysql.com/doc/refman/5.0/en/cursors.html
iets als (niet getest ofzo)
SELECT deur.*, COUNT(eigenschap.id) as eigenschap_aantal
FROM deur
INNER JOIN eigenschap ON deur.id = eigenschap.deur_id
WHERE eigenschap.kenmerk IN (1, 2, 3, 4, 5)
HAVING eigenschap_aantal = 5
Controleer ik hiermee werkelijk alle eigenschap(attribuut)-id's op waarde, of kijk ik nu enkel naar het aantal en of er iig 1 overeenkomst is.
Dit lijkt goed te werken:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$haalOptions = " SELECT *, COUNT(conf_SysOpt_HasAtt.SysOpt_Attributes_Att_ID) as eigenschap_aantal
FROM conf_SysOptions
INNER JOIN conf_SysOpt_HasAtt ON conf_SysOptions.Opt_ID = conf_SysOpt_HasAtt.SysOptions_Opt_ID
WHERE conf_SysOpt_HasAtt.SysOpt_Attributes_Att_ID IN (".$cc_list.")
AND conf_SysOptions.Parent_ID = ".$ParentsTab['Par_ID']."
GROUP BY conf_SysOpt_HasAtt.SysOptions_Opt_ID
HAVING eigenschap_aantal = ".$cc_count."
";
FROM conf_SysOptions
INNER JOIN conf_SysOpt_HasAtt ON conf_SysOptions.Opt_ID = conf_SysOpt_HasAtt.SysOptions_Opt_ID
WHERE conf_SysOpt_HasAtt.SysOpt_Attributes_Att_ID IN (".$cc_list.")
AND conf_SysOptions.Parent_ID = ".$ParentsTab['Par_ID']."
GROUP BY conf_SysOpt_HasAtt.SysOptions_Opt_ID
HAVING eigenschap_aantal = ".$cc_count."
";
Gewijzigd op 01/01/1970 01:00:00 door ruben
Gelieve Niet Bumpen::
Gewijzigd op 01/01/1970 01:00:00 door ruben
blij dat je het werkend hebt kunnen krijgen :)