Nieuw lid |
|
Hoi,
Ik heb het volgende probleem met een mysql querie.
Achtergrond info :
Deze querie zal gebruikt worden in een kleuren filter
http://www.findyoursneakers.com/Browse/
Je kan meerdere kleuren selecteren en deze filteren.
Nu zou ik graag als je bijvoorbeeld rood en wit selecteerd willen dat deze twee kleuren bovenaan verschijnen.
DB :
Voorbeeld querie
Filter ;
Merk : puma
Kleuren : rood en wit
SELECT a.id,a.p_id,a.naam,a.merk,b.tekst,b.s_id,b.main_image ,c.s_id FROM sneaker_naam as a INNER JOIN sneaker_info as b ON a.id=b.s_id JOIN sneaker_kleuren as c ON b.s_id=c.s_id WHERE ( a.merk='Puma' ) AND ( ( c.real_color='Red' OR c.real_color='White' ) ) ORDER BY a.kliks DESC
SELECT a.id,a.p_id,a.naam,a.merk,b.tekst,b.s_id,b.main_image ,c.s_id FROM sneaker_naam AS a INNER JOIN sneaker_info AS b ON a.id=b.s_id JOIN sneaker_kleuren AS c ON b.s_id=c.s_id WHERE ( a.merk='Puma' ) AND ( ( c.real_color='Red' OR c.real_color='White' ) ) ORDER BY a.kliks DESC
de querie haalt uit 3 tabellen zijn info
sneaker_naam ( naam schoen en id die gelinkt word als s_id bij de andere tabellen
Sneaker_kleuren :
De tabel heeft de volgende velden:
id
kleur
s_id ( id van sneaker_naam)
Elke schoen ( met een unieke s_id) kan 1 t/m 5 kleuren bevatten
dus bijvoorbeeld de air max 95 heeft in sneaker kleuren 3 rijen met wit,rood en blauw . Allemaal met dezelfte s_id.
Nou wil ik dat als je wit/rood selecteerd deze bovenaan komen te staan bij de filter , nu krijg je wit met blauw door de OR.
Er moet dus ergens een subquerie komen waar ik de schoenen(s_id) met de kleuren wit EN rood boven aan de resultaten krijg.
Kan iemand me op de goede weg helpen ??
Alvast bedankt
Edit :
Volgens mij heb ik hem, iemand die nog wat op te merken heeft of er een betere manier is ?
SELECT a.id, a.p_id, a.naam, a.merk, b.tekst, b.s_id, b.main_image, c.s_id, c.real_color, (
SELECT COUNT( * ) AS bla
FROM sneaker_kleuren
WHERE s_id = a.id
AND (
real_color = 'Red'
OR real_color = 'White'
)
GROUP BY s_id
ORDER BY bla DESC
LIMIT 0 , 1
) AS
SUPER FROM sneaker_naam AS a
INNER JOIN sneaker_info AS b ON a.id = b.s_id
JOIN sneaker_kleuren AS c ON b.s_id = c.s_id
WHERE (
a.merk = 'Puma'
)
AND (
(
c.real_color = 'Red'
OR c.real_color = 'White'
)
)
GROUP BY a.id
ORDER BY SUPER DESC
SELECT a.id, a.p_id, a.naam, a.merk, b.tekst, b.s_id, b.main_image, c.s_id, c.real_color, ( SELECT COUNT( * ) AS bla FROM sneaker_kleuren WHERE s_id = a.id AND ( real_color = 'Red' OR real_color = 'White' ) GROUP BY s_id ORDER BY bla DESC LIMIT 0 , 1 ) AS SUPER FROM sneaker_naam AS a INNER JOIN sneaker_info AS b ON a.id = b.s_id JOIN sneaker_kleuren AS c ON b.s_id = c.s_id WHERE ( a.merk = 'Puma' ) AND ( ( c.real_color = 'Red' OR c.real_color = 'White' ) ) GROUP BY a.id ORDER BY SUPER DESC
|