Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Cennik, siatka cen w db.
exseerius
post
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 31.12.2006

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


Witam,

Już jakiś czas zastanawiam się nad rozwiązaniem problemu z siatka cen do produktów.

Mam sobie program, który ma służyć do obliczania cen za poszczególne przedmioty (meble),
lecz ich ceny zależne są od wymiarów - dajmy na to jednej ścianki.

I tak oto mam od firmy zlecającej całą tabelkę z cenami np:


Kod
wys\szer  500-600   601-700  701-800  801-900 itd.
500-600     150       326      489      zzz  
601-700     389       489      550      zzz
701-800     xyx       yxy      yyx      xxy
801-900     xxx       yyy      yxx      xyy
itd.


Tutaj mam jeszcze tabele z cenami w zależności od kroju itp, ale jak uporam się z sama ideą
dla tej bazy danych będzie już ok.

Mam zatem pytanie, jak umieścić takie tabele z cenami w bazie danych i jak składać zapytania
SQL, aby wyciągnąć informację ile kosztować będzie ścianka o wymiarach np. 527x780
(wymiary mieszczą się w szerokości 500-600 i wysokości 701-800, czyli cena XYX,
tylko jak to sprawdzić zapytaniem jednym?)

Myślałem nad stworzeniem tabeli, gdzie zamiast wymiarów WxH, byłyby wpisane maksymalne pola,
lub obwody danych elementów, ale nie wiem czy to dobre rozwiązanie, może ktoś z was ma inne.

Musi być również możliwość wygenerowania pełnej siatki cen w formacie jaki podałem wyżej, czyli
info o W i H powinny gdzieś być zaszyte.

Musze brać pod uwagę również fakt iż, ceny mogą się zmieniać i muszę mieć łatwy sposób ich aktualizacji
(zmieniać mogą się pojedyncze wartości, lub na zasadzie ALL +20%).

Z góry wielkie dzięki za informacje (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
croc
post
Post #2





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Wiesz co, chyba wymyśliłem proste i fajne rozwiązanie.

Tabela prices:

id - integer, PRIMARY
width_max - integer
height_max - integer
price - decimal
item_id - integer // klucz obcy na tabelę z obiektami, których dotyczy cennik


width_max i height_max to wartości krańcowe zakresu. Proponuję takie zapytanie do wybierania danych:
  1. SELECT price FROM `prices`.`prices` WHERE item_id = [tutaj identyfikator obiektu] AND width_max > [tutaj szerokość] AND height_max > [tutaj wysokość] ORDER BY width_max ASC, height_max ASC LIMIT 1


Nierówności mogą być ostre lub nieostre. Zrobiłem nieostre, bo dla np. obiektu o wymiarach 600 x 520 lepiej by trafił on do przedziału [600-700] x [500-600] niż [500-600] x [500-600]. Nazwa _max może być trochę myląca, bo chodzi o przedział niedomknięty. Jednak lepiej w bazie zawrzeć maksimum przedziału niż minimum, bo dla bardzo małych obiektów znajdzie ci cenę z najmniejszego przedziału, a dla zbyt dużego nie zwróci nic i o to chodzi.

Ten post edytował croc 13.05.2010, 15:03:41
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: 7.10.2025 - 19:41