login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Heftige Querie

Offline HOND_NL - 05/05/2009 19:14 (laatste wijziging 05/05/2009 19:39)
Avatar van HOND_NLNieuw 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

  1. 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 ?


  1. SELECT a.id, a.p_id, a.naam, a.merk, b.tekst, b.s_id, b.main_image, c.s_id, c.real_color, (
  2.  
  3. SELECT COUNT( * ) AS bla
  4. FROM sneaker_kleuren
  5. WHERE s_id = a.id
  6. AND (
  7. real_color = 'Red'
  8. OR real_color = 'White'
  9. )
  10. GROUP BY s_id
  11. ORDER BY bla DESC
  12. LIMIT 0 , 1
  13. ) AS
  14. SUPER FROM sneaker_naam AS a
  15. INNER JOIN sneaker_info AS b ON a.id = b.s_id
  16. JOIN sneaker_kleuren AS c ON b.s_id = c.s_id
  17. WHERE (
  18. a.merk = 'Puma'
  19. )
  20. AND (
  21. (
  22. c.real_color = 'Red'
  23. OR c.real_color = 'White'
  24. )
  25. )
  26. GROUP BY a.id
  27. ORDER BY SUPER DESC

1 antwoord

Gesponsorde links
Offline Rik - 06/05/2009 19:58
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Fijne query heb je nu.  

Kan het niet zo?
  1. SELECT <alle velden die je wilt>
  2. FROM sneaker_info
  3. LEFT JOIN sneaker_naam ON sneaker_naam.s_id = sneaker_info.s_id
  4. LEFT JOIN sneaker_kleuren ON sneaker_kleuren.s_id = sneaker_info.s_id
  5. WHERE sneaker_naam.merk IN (<merk1>, <merk2>, ...)
  6. WHERE sneaker_kleur.merk IN (<kleur1>, <kleur2>, ...)

Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.164s