Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Na jakiej zasadzie wyświetlić przedziały cenowe dostępnych produktów?
Forum PHP.pl > Forum > PHP
kukix
Witam.
Dostałem od znajomego zlecenie rozbudowy pewnego skryptu sklepowego o funkcje wyświetlania przedziałów cenowych dostępnych produktów w danej kategorii.
Coś jak np w Ceneo w lewym menu:

  1. poniżej 1013 zł
  2. od 1014 do 2040 zł
  3. od 2041 do 3289 zł
  4. od 3290 do 5210 zł
  5. powyżej 5218 zł


Jak wygenerować takie przedziały? Czy to po prostu dzieli wszystkie dostepne ceny na 4 i wyświwetla z danego przedziału największa i najmniejszą?

Czyli ilości powinny być porównywalne w każdym przedziale, a np na tej stronie widze, że są duze różnice w poszczególnych przedziałach cenowych, czyli produkty nie są tak po prostu dzielone.

Macie może pomysł, jak rozwiązać ta sprawę?
Będę wdzięczny za wszelkie wypowiedzi.
emajl22
Hmm, a samo " <, > " w zapytaniu nie wystarczy? Oczywiście w klauzuli WHERE.

Przykład:
  1. SELECT * FROM `tabela` WHERE `x` < 'cena' AND `y` > 'cena2'
Crozin
Na początek:
Kod
# Podsumowanie kategorii
# minimalna - maksymalna cena (ilość stron) - ilość produków
   0,80 - 28824,34 (523) - 10460

# Kolejne filtry cenowe
# minimalna - maksymalna cena (ilość stron) - stosunek ilości stron do ogółu
   0,80 -  1008,00 (302) - 58%
1014,80 -  2040,00 (137) - 26%
2041,60 -  3289,00 (048) -  9%
3290,00 -  5187,00 (024) -  5%
5218,67 - 28824,34 (014) -  3%
Jak widać nie jest to żadna skala liniowa. Raczej wątpię by w innych kategoriach proporcje wyglądały podobnie.
Zapewne przy generowaniu przedziałów pod uwagę brane będzie 80-90% produktów (skrajne ceny zostaną odrzucone, by pojedyncze produkty nie psuły wyników).
Dochodzi druga w nocy i nie chce mi się sprawdzać ale być może przedziały są określane na podstawie jakiejś skali logarytmicznej.
Pilsener
Zagadnienie statystyczne. Dwie skrajne wartości mamy, liczbę przedziałów najlepiej określić jako stałą, co do rozpiętości przedziałów sugeruję korzystać z tego:
http://pl.wikipedia.org/wiki/Rozk%C5%82ad_normalny
Możesz być nawet lepszy od konkurencji i machnąć wykres.
Poczytaj o przedziałach ufności, poziomie istotności, funkcjach gęstości itp. Dzisiaj masz dużo gotowych narzędzi (np. w excelu).
kukix
Niestety nie mam wykształcenia matematycznego. Skończyłem administracje :/ Zastanawiam się jakby można było to po chłopsku ogarnąć.

Może zrobić tak. Podzielić wszystkie dostępne ceny na 5 przedziałów.

od 0 do maksymalnej liczby dajmy na to 7688 zł. Jeden przedział wychodzi wtedy 1537zł. Pierwszy przedział można by zrobić mniejszy, ale trzeba to zrobić jakoś uniwersalnie :/

poniżej 200.00 zł (127)
od 200.00 do 400.00 zł (90)
od 400.00 do 1400.00 zł (91)
od 1400.00 do 2600.00 zł (83)
powyżej 2600.00 zł (82)
Wicepsik
Ja bym to zrobił tak

  1. <?php
  2. $t = array(22,37,24,1603,1456,69,39,138,138,376,242,242,415,267,
  3. 267,439,268,268,577,251,251,492,1008,1008,1359,280,280,445,489,489,824,
  4. 186,186,320,69,69,153,329,329,539,138,138,236,183,183,300,512,512,949,81,
  5. 81,184,820,820,1089,192,192,414,687,687,1099,349,349,557,653,653,929,489);
  6. $suma = 0;
  7. foreach($t as $v) $suma += $v;
  8. $suma = round($suma / count($t));
  9. foreach($t as $v){
  10. if($v > $suma*3) $r[3]++;
  11. else if($v > $suma*2) $r[2]++;
  12. else if($v > $suma) $r[1]++;
  13. else $r[0]++;
  14. }
  15. for($i=0;$i<4;$i++){
  16. if($i==0) echo '<br>poniżej '.$suma.' zł ('.$r[$i].')<br>';
  17. else if($i==3) echo 'powyżej '.($suma*3+1).' zł ('.$r[$i].')<br>';
  18. else echo 'od '.($suma*$i+1).' do '.($suma*($i+1)).' zł ('.$r[$i].')<br>';
  19. }
  20. ?>


Wynik
Kod
poniżej 437 zł (41)
od 438 do 874 zł (18)
od 875 do 1311 zł (6)
powyżej 1312 zł (3)


Tak na szybko zrobiłem
Pilsener
No i co, poniżej 437 masz aż 41, czyli najliczniejsza grupa nie jest podzielona...

Po chłopsku mówisz? Jeśli chcesz wprowadzić stałą liczbę przedziałów to ja bym Ci radził też dać stałą liczbę elementów na przedział, czyli jeśli masz np. 100 telewizorów to będzie wychodziło po 20 na przedział i wyglądało to będzie mniej więcej tak:
1. < 400 zł - 20
2. 400-450 zł - 20
3. 450-470 - 20
4. 470-560 - 20
5. 560 < - 20

To będzie najprostsze do zrobienia i przejrzyste dla użytkowników.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.