Query met meerdere where-s

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roy -

Roy -

15/12/2012 17:14:11
Quote Anchor link
Een voorbeeld tabelletje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
product_id,feature,value
------------------------
10,10,10
10,11,11

11,11,11

12,10,10
12,11,11
12,12,12


Daarbij de volgende query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT product_id
FROM tb_spec_fk
WHERE
    (feature=10 AND value IN(10))
    AND (feature=11 AND value IN(11))


Waarbij ik als resultaat verwacht: 10 en 12. Helaas krijg ik hiermee geen resultaten terug.

Wie o wie? :)
 
PHP hulp

PHP hulp

05/11/2024 16:26:57
 
Erwin H

Erwin H

15/12/2012 17:31:11
Quote Anchor link
Logica:
feature = 10 AND feature = 11

Dat kan natuurlijk niet. feature is 10 OF 11.

Dus:
(feature=10 AND value IN(10))
OR (feature=11 AND value IN(11))
 
Rory S

Rory S

15/12/2012 17:36:12
Quote Anchor link
Nee bovenstaande oplossing zou ook product_id 11 teruggeven and hij wil alleen de product_id terugkrijgen die 10,10 en 11,11 bevatten.

Ik dacht aan onderstaande query alleen als de tabel veel data bevat dan is deze niet goed voor je performance.

SELECT product_id
FROM tb_spec_fk
WHERE
product_id IN (SELECT product_ID from tb_spec_fk WHERE feature=10 AND value IN(10))
AND product_id IN (SELECT product_ID from tb_spec_fk WHERE feature=11 AND value IN(11))
GROUP BY product_id

Omdat er in meerdere rows gezocht moet worden dient de product_id ook gegroepeerd te worden anders krijg je 10,10,12,12,12.
Gewijzigd op 15/12/2012 17:36:44 door Rory S
 
Roy -

Roy -

15/12/2012 17:44:16
Quote Anchor link
Dank voor de reacties tot nu toe!
Het gaat inderdaad om een grote hoeveelheid data. Dubbele items met distinct eruit halen misschien nog een idee? Heb zelf nog geen oplossing gevonden hoe ik dat eventueel toepas in deze situatie.
 
Erwin H

Erwin H

15/12/2012 17:47:32
Quote Anchor link
Leg dan eens in woorden uit wat je nu precies wilt hebben.
 
Roy -

Roy -

15/12/2012 17:49:54
Quote Anchor link
Wat Rory aangeeft en wanneer mogelijk sneller.
 
Erwin H

Erwin H

15/12/2012 17:51:17
Quote Anchor link
Dan wordt het dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
  SELECT product_id
  FROM tb_spec_fk
  WHERE (feature=10 AND value IN(10)) OR (feature=11 AND value IN(11))
  GROUP BY product_id
  HAVING count(*) = 2;
 
Rory S

Rory S

15/12/2012 17:59:02
Quote Anchor link
Is het een optie dat dit twee keer kan voorkomen?
11, 11 ,11
11, 11, 11

Of heb je een gecombineerde sleutel?
 
Roy -

Roy -

15/12/2012 18:07:30
Quote Anchor link
@Erwin: dank! Ga het spoedig testen.

@Rory: nee dat komt niet voor.

Toevoeging op 16/12/2012 14:14:27:

@Erwin: Hartelijk dank! Het werkt perfect! :)
 



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.