multiple id's vergelijken in MySQL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ruben

ruben

21/11/2009 14:46:00
Quote Anchor link
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 (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.")
 
PHP hulp

PHP hulp

23/12/2024 04:31:31
 
Marco

Marco

22/11/2009 22:08:00
Quote Anchor link
Dat is een lastige, wat moeilijk is op te lossen met alleen sql.
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
 
Martijn Wieringa

Martijn Wieringa

23/11/2009 10:28:00
Quote Anchor link
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
 
Ruben

ruben

23/11/2009 12:30:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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."
                                        ";
Gewijzigd op 01/01/1970 01:00:00 door ruben
 
Ruben

ruben

23/11/2009 12:55:00
Quote Anchor link
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 Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door ruben
 
Martijn Wieringa

Martijn Wieringa

24/11/2009 10:44:00
Quote Anchor link
blij dat je het werkend hebt kunnen krijgen :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.