Autor Zpráva
vojtan
Profil
Zdravím, mám tento dotaz v Mysql

select * form vyrobky where v.menu in(".$menuProZbozi.") or v.kat_ostatni in(".$menuProZbozi.");


ale data se nevypisují správně, ve sloupci v.menu je id kategorie jako INT, sloupec v.kat_ostatni je VARCHAR a zde jsou uvedeny čísla kategorií oddělené čárkou. Jak docílím toho, aby se porovnalo, jestli právě zobrazená kategorie $menuProZbozi spadá do toho výčtu v kat_ostatni?
DJ Miky
Profil
Docílit toho jde, ale je to špatný návrh databáze. Mnohem lepší je vyčlenit sloupec kat_ostatni do samostatné tabulky a tu připojit JOINem.

Takže např. místo:
vyrobky
-------
id | kat_ostatni
1    "2,3,4"


Budeš mít tabulky dvě:
vyrobky
-------
id | ...
1

vyrobky_kategorie
-----------------
id_vyrobku | id_kategorie
1            2
1            3
1            4
vojtan
Profil
já bych to tak vyřešil, ale jde o to, že už ta databáze je takhle naplněná a s tím už nic neudělám. Jde to ještě vyřešit nějak jinak?
Tori
Profil
vojtan:
jde o to, že už ta databáze je takhle naplněná a s tím už nic neudělám
Můžete tam ten sloupec nechat pro zpětnou kompat., doplnit tu vazební tabulku a napsat si skript, který projde všechny řádky z vyrobky a nasype data do vazební tabulky. S tímhle návrhem budete mít fakt zbytečné obtíže při jakékoli editaci + výrazně pomalejší vyhledávání, než při spojení tabulek.

edit: ještě ta vazební tabulka by mohla mít navíc sloupeček priorita, kde rozlišíte, jestli to je hlavní kategorie toho výrobku (místo vyrobky.menu), anebo některá z dalších kategorií (místo vyrobky.kat_ostatni)
Kajman_
Profil *
vojtan:
Pokud nemáte možnost vazby ke kategoriím převést do rozumné podoby, tak existuje funkce
find_in_set()

Ale jak již zmínila Tori, rychlé to nebude.

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:

0