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
sniver
post
Post #2





Grupa: Zarejestrowani
Postów: 159
Pomógł: 5
Dołączył: 31.08.2007

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


Pomijając tabele z bazą produktów, cenami, promocjami itp. duperelami u mnie mniej więcej wygląda to tak:

To zapytanie liczące ilość produktów z wybranymi parametrami (wybrałem je bo jest krótsze, a długość o wiele mniejsza (IMG:style_emoticons/default/smile.gif) )

  1. SELECT
  2. ceil(count(0)/10) AS `licz`
  3.  
  4. FROM
  5. `products` AS `p`
  6. JOIN `productsparametr` AS `pp1` ON (`pp1`.`PRD_Id` = `p`.`PRD_Id`)
  7. JOIN `productsparametr` AS `pp2` ON (`pp2`.`PRD_Id` = `p`.`PRD_Id`)
  8. JOIN `productsparametr` AS `pp3` ON (`pp3`.`PRD_Id` = `p`.`PRD_Id`)
  9.  
  10. WHERE
  11. (`p`.`CAT_Id` IN (53))
  12. AND (`p`.`PRD_Deleted` = 0)
  13. AND (`p`.`PRD_Active` = 1)
  14. AND (
  15. (`pp1`.`PRV_Id` IN (48,49))
  16. AND (`pp1`.`PRP_Value` BETWEEN '3' AND '10')
  17. )
  18. AND (`pp2`.`PRV_Id` = 50)
  19. AND (`pp3`.`PRV_Id` IN (1,2,3))


każde podłączenie tabeli za pomocą join jest generowane przez skrypt php, co w konsekwencji buduje zapytanie sql. Zapytanie zostało wykonane ze strony: http://www.erobay.pl/kategorie/53/Biustonosze.html

więc możesz sobie zobaczyć względem parametrów jak sie to składa w całość (IMG:style_emoticons/default/smile.gif)

prawde mówiąc to troche sie napociłem by to wymyśleć i by działało, względem wyszukiwarki i kategorii w głąb. Oto mój sposób - może nie najlepszy i nie najbardziej efektywny ale działa ;]

PS. Nie wykorzystuje parametrów póki co, ale ten sposób napewno działa - poprostu parametry nie są przypisane do produktów (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował sniver 7.10.2010, 13:10:04
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: 9.10.2025 - 23:40