Kom ihåg mig?
Home Menu

Menu


MySQL - välja rader som uppfyller flera villkor

 
Ämnesverktyg Visningsalternativ
Oläst 2013-08-15, 11:58 #1
mephisto73s avatar
mephisto73 mephisto73 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2008
Inlägg: 730
mephisto73 mephisto73 är inte uppkopplad
Mycket flitig postare
mephisto73s avatar
 
Reg.datum: Jan 2008
Inlägg: 730
Problemet är att den lösningen har en OR-logik. Den listar de produkter som är röda ELLER är crossover. Jag behöver de produkter som har egenskap 1 OCH egenskap 2 OCH egenskap 3..., eller snarare de produkter som har egenskap_array_1 OCH egenskap_array_2 o.s.v.

T.ex. vill jag i mitt filter vill se alla bilar som är blå ELLER röda OCH som är av typen crossover ELLER SUV...
mephisto73 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-08-15, 12:11 #2
linusoleander linusoleander är inte uppkopplad
Medlem
 
Reg.datum: Feb 2010
Inlägg: 234
linusoleander linusoleander är inte uppkopplad
Medlem
 
Reg.datum: Feb 2010
Inlägg: 234
Kod:
SELECT * FROM products P 
LEFT JOIN product_properties PP ON PP.product_id = P.ID 
LEFT JOIN property_values PV ON PV.ID = PP.property_ID 
WHERE property_values.value = 'crossover' AND property_values.value = 'red';
linusoleander är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-08-15, 14:02 #3
mephisto73s avatar
mephisto73 mephisto73 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2008
Inlägg: 730
mephisto73 mephisto73 är inte uppkopplad
Mycket flitig postare
mephisto73s avatar
 
Reg.datum: Jan 2008
Inlägg: 730
Citat:
Ursprungligen postat av linusoleander Visa inlägg
Kod:
SELECT * FROM products P 
LEFT JOIN product_properties PP ON PP.product_id = P.ID 
LEFT JOIN property_values PV ON PV.ID = PP.property_ID 
WHERE property_values.value = 'crossover' AND property_values.value = 'red';
Returnerar noll rader!?

Jag tror dock att jag är en lösning på spåren:

Kod:
SELECT bp.ID FROM `base_products` bp 
JOIN product_properties pp ON pp.product_id=bp.ID
JOIN product_properties_values ppv ON pp.property_value_id = ppv.ID
WHERE ppv.value IN ('16','21') OR ppv.value IN ('blå')
GROUP BY ID HAVING COUNT(*) = 2
Där jag skippar "AND" mellan villkorsgrupperna och istället använder "OR", samtidigt som jag villkorar gruppningen av de returnerade raderna:

Kod:
GROUP BY ID HAVING COUNT(*) = 2
Där 2 motsvarar antalet egenskapsgrupper eller villkorsgrupper jag vill att de returnerade produkterna skall uppfylla.
mephisto73 är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 23:39.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017