multiple id's vergelijken

Status
Niet open voor verdere reacties.

darkmouse

Gebruiker
Lid geworden
12 apr 2009
Berichten
15
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.")
 
Hallo darkmouse,

Je hebt 3 tabellen nodig ipv 2, namelijk de tabellen Opties, Eigenschappen en OptiesEigenschappen.

Tabel Opties
OptID - OptNaam - Parent
1 - EDR - 2
2 - EDL - 2
3 - DDR - 2
4 - DDL - 2
5 - ETR - 2
6 - ETL - 2
enzovoorts...

Tabel Eigenschappen
EigenschapID - Eigenschap - Type
8 - enkel - deur
10 - links - deur
11 - rechts - deur
13 - duwend - deur
18 - enkel - raam
20 - links - raam
21 - rechts - raam
23 - duwend - raam
enzovoorts...

Tabel OptiesEigenschappen waar je de opties aan de eigenschappen hangt
OptID - EigenschapID
1 - 1
1 - 8
1 - 11
1 - 13
2 - 1
2 - 8
2 - 10
2 - 13
enzovoorts...

Je kunt voor het type eventueel ook nog een tabel maken.

Mvg,
Peter
 
Hallo Peter,

Klopt helemaal wat je zegt. Dat is in de praktijk ook zo.
 
Hallo darkmouse,

De volgende query levert per OptID het aantal overeenstemmingen in EigenschapID op. In het resultaat van de query kijk je dan waar count 4 is, de bijbehorende OptID voldoet dan. Er mogen wel geen duplicaten in de tabel optieseigenschappen staan.

SELECT optieseigenschappen.OptID, COUNT(optieseigenschappen.OptID) as count FROM optieseigenschappen LEFT JOIN Opties ON optieseigenschappen.OptID=Opties.OptID WHERE optieseigenschappen.EigenschapID IN (1,8,10,13) AND Opties.Parent=2 GROUP BY optieseigenschappen.OptID

Mvg,
Peter
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan