Ik heb een tabel met Opties:

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]$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.")



Kun je d.m.v. een COUNT() bekijken hoeveel passen eigenschappen worden gevonden, en als dit aantal 5 is, dan uitlezen..


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
Is dit waterdicht?
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:

$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." 
										";


Gelieve Niet Bumpen:

Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de knop om je tekst aan te passen.

SanThe.
blij dat je het werkend hebt kunnen krijgen :)

Reageren