Autor Zpráva
Tomáš Zátopka
Profil *
Dobrý deň,
chcel by som sa spýtať, či je možné zoraďovať výsledky dotazu podľa ceny, na ktorú je uplatnená zľava. Pre lepšiu predstavu uvediem konkrétny príklad.

Mám eshop, kde je tabuľka produktov, napr." ID, NAZOV, CENA. V eshope sú užívatelia, ktorí sú zaradení do určitej rabatovej skupiny. (V rabatovej skupine (tabuľka ID, NAZOV, ZLAVY sa v poli ZLAVY nachádzajú pridelené zľavy daného užívateľa, serializovane pole zliav, podľa id produktu. Napr.
$zlava_serialized = serialize($zlava_arr = array(1 => 10, 2 => 20, 3 = 12, 4 = 15))

Na výstupe by som chcel produkty vedieť zoraďovať podľa ceny. Samozrejme ak je v query
ORDER BY cena ASC LIMIT 1, 10
Tak je to zoraďovanie bez zľavy (a môže sa stať, že bude drahší produkt na prvom mieste, ako produkt lacnejší... ak naň bude pre daného zákazníka zĺava - cenu si na výstupe preženiem funkciou, ktorá mi vráti požadovanú sumu pre daného zákazníka). Je nejaký spôsob, ako zoraďovať správne produkty podľa cien už po zľave?

Ďakujem za každú radu.
juriad
Profil
Tomáš Zátopka:
Ano, neukládej slevy do databáze serializovaně; to souvisí s Některé časteji řešené dotazy pro MySQL - FAQ » Více hodnot ve sloupci.
Napiš ten dotaz, tak aby uměl vypočítat cenu po slevě; nejspíš ti bude stačit jen několik JOINů.
Inspiruj se: Vyber produktu z databaze na zaklade ceny
Tomáš Zátopka
Profil *
juriad:
Problém je práve v tom, že ide o reálny eshop, kde nemám možnosť meniť dáta v DB - resp. ich štruktúru.
juriad
Profil
V tom případě to není možné (žádný způsob mě nenapadá). Se serializovanými daty databáze neumí pracovat.

Šlo by je manuálně parsovat přímo v dotazu (struktura toho uloženého řetězce je známá), ale připrav se na mnoha tisícinásobné zpomalení dotazů. To nechceš dělat, pokud není tvým cílem ten eshop zabít/pohřbít.
Kajman
Profil
Tomáš Zátopka:
kde nemám možnosť meniť dáta v DB - resp. ich štruktúru.

Ani si nemůžete ze špatně navrhnuté tabulky pravidelně (např. při každé změně slev) data předělat do své nové tabulky, která bude pro tento dotaz použitá?

skupiny_slevy
id_skupiny id_slevy sleva
         1        1    10
         1        2    20
         1        3    12
         1        4    15

Edit: Nebo eshop reklamujte, ať to opraví ten, kdo to takhle splácal. Řazení podle (koncové) ceny umí snad každý jiný eshop.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: