Zadejte hledaný výraz...

Získání kategorií výrobku z DB

Dobrý den,
námět na diskuzi mě osobně velice zaujal, tak přidávám tento příspěvek.
Kód řeší tuto situaci: v databázi jsou u výrobku uložené kategorie, u každé položky jich je více a jsou odděleny čárkou (např. "sport, zdravá výživa, ..."). Potřeboval jsem získat seznam jednotlivých kategorií od všech výrobků a jejich počet. Věřím, že by to šlo udělat lépe, avšak zde je moje řešení:
výsledek tedy poté vypadá takto
snad se bude hodit;).
Pozn.: Zajímalo by mě, jestli to lze udělat přímo v databázi, chvíli jsem něco zkoušel, ale pak jsem zvolil cestu php...
5. 6. 2011 18:20:33
https://webtrh.cz/diskuse/ziskani-kategorii-vyrobku-z-db#reply642980
Díky za odvážný první příspěvek do nové sekce.
Největší slabinou tohoto řešení je struktura databáze. Ukládáním kategorií jako výrazů oddělených speciálním znakem se obíráte o všechny funkce relační databáze.
Na vašem místě bych databázi denormalizoval, tj. vytvořil strukturu naznačenou tady:
Seznam kategorií, počet kategorií, počet výrobků v kategorii atd. pak dostanete triviálními SQL dotazy.
Předpokládejme ale, že z nějakého důvodu není možné jména normalizovat. Třeba počítáme frekvenci slov v textu.
Moje verze je tady:
Hlavní problém kódu jsou názvy proměnných.
Jednopísmenné proměnné nemají v kódu co dělat a navíc stejná proměnná má na různých místech odlišnou funkci ($v, $r).
Je zbytečné řadit v SQL dotazu kategorie podle abecedy. Řazení v tomto případě nehraje roli.
Blok po while() by měl být obalený složenými závorkami, ačkoliv má jen jeden řádek.
Když budeme frekvenci počítat už v cyklu, ve kterém procházíme řádky z DB, ušetříme jeden foreach() průchod.
V každém cyklu provádíte zbytečně náročnou operaci array_keys() a následně in_array(). Stačí se zeptat na existenci klíče.
Díky za kód a jsem zvědavý, co napadne ostatní.
5. 6. 2011 19:32:02
https://webtrh.cz/diskuse/ziskani-kategorii-vyrobku-z-db#reply642979
Děkuji za rychlou odpověď,
bohužel databázi nelze udělat jinak.
Proměnné jsem nezvolil zcela dobře, u cyklů, které neobsahují více než jeden příkaz jsem zvyklý nedělat závorky, i když to někdy znepřehledňuje kód. Děkuji za upozornění, že provádím zbytečně operace array_keys() a následně in_array(), někdy na jednoduchých věcích hledám složitosti, když to jde udělat jednuduše pomocí isset:)
Dát foreach přímo do whilu mě taky nenapadlo - další poučení...:[ Příště už se snad takovýchto chyb vyhnu...:)
5. 6. 2011 19:49:45
https://webtrh.cz/diskuse/ziskani-kategorii-vyrobku-z-db#reply642978
Pro odpověď se přihlašte.
Přihlásit