Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie wyszukujące na podstawie parametrów (tak jak na allegro)
lorak110786
post
Post #1





Grupa: Nieautoryzowani
Postów: 34
Pomógł: 1
Dołączył: 22.06.2009
Skąd: Koszalin/Poznań

Ostrzeżenie: (0%)
-----


Witam. Mam następujący problem:
Są 2 tabele:
produkty, parametry

w tabeli 'produkty' są pola:
id_produktu, nazwa

w tabeli 'parametry' są pola:
id_produktu, parametr, wartosc

Omawiając. Każdy produkt ma kilka parametrów. Każdy parametr ma jakąś wartość. Mam 3 produkty: pr1, pr2, pr3. Mam też ogólnie 3 parametry: wys, szer, waga. Łącznie w tabeli 'parametry' mam 9 rekordów, po 3 pary >parametr i wartość parametru< dla każdego z produktów.

Chciałbym napisać takie zapytanie które wybierze mi produkty spełniające WSZYSTKIE określone warunki w jednym zapytaniu czyli np: 'wys' BETWEEN 30 AND 100, oraz 'szer' BETWEEN 60 AND 100 oraz 'waga' BETWEEN 10 AND 100

Próbowałem już kombinować na różne sposoby, ale nie chce mi wyjść. Otrzymuję albo wyniki produktów spełniających dowolne kryterium, lub jeśli w HAVING użyję "AND" - brak wyników, co jest oczywiste gdyż nie ma dwóch rekordów spełniających warunki na AND.

  1. SELECT *
  2. FROM products
  3. LEFT JOIN products_values vals USING(id_product)
  4. HAVING (vals.id_label=61 AND vals.value BETWEEN 100 AND 500) OR (vals.id_label=63 AND vals.value BETWEEN 15 AND 30)


Ma ktoś na to jakiś mądry sposób? Z góry dziękuję za podpowiedzi.

Ten post edytował lorak110786 5.10.2010, 14:40:09
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lorak110786
post
Post #2





Grupa: Nieautoryzowani
Postów: 34
Pomógł: 1
Dołączył: 22.06.2009
Skąd: Koszalin/Poznań

Ostrzeżenie: (0%)
-----


@sniver
Zrobiłem tak jak u Ciebie. Buduję w ten sposób duże zapytanie. Zapytanie wykonuje się całkiem szybko a sposób jest nader skuteczny i przede wszystkim działa:)

  1. SELECT products.id_product, products.name, products.id_category, categories.value AS category, (
  2.  
  3. SELECT ROUND( MAX( price ) , 2 )
  4. FROM providers_products priceproviders
  5. WHERE products.id_product = priceproviders.id_product
  6. ) AS maxprice, (
  7.  
  8. SELECT ROUND( MIN( price ) , 2 )
  9. FROM providers_products priceproviders
  10. WHERE products.id_product = priceproviders.id_product
  11. ) AS minprice
  12. FROM products products
  13. JOIN treecat AS categories
  14. USING ( id_category )
  15. JOIN products_values AS param61
  16. USING ( id_product )
  17. JOIN products_values AS param63
  18. USING ( id_product )
  19. JOIN products_values AS param64
  20. USING ( id_product )
  21. WHERE products.id_category
  22. IN ( 115 )
  23. AND (
  24. param61.id_label = '61'
  25. AND param61.value
  26. BETWEEN 100
  27. AND 500
  28. )
  29. AND (
  30. param63.id_label = '63'
  31. AND param63.value
  32. BETWEEN 15
  33. AND 30
  34. )
  35. AND (
  36. param64.id_label = '64'
  37. AND param64.value
  38. IN ( 0, 1, 3 )
  39. )



Bardzo dziękuję Ci za pomoc. Serdecznie pozdrawiam:)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 07:51