Autor | Zpráva | ||
---|---|---|---|
vojtan Profil |
#1 · Zasláno: 22. 8. 2011, 12:39:43
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 |
#2 · Zasláno: 22. 8. 2011, 12:43:52
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 |
#3 · Zasláno: 22. 8. 2011, 13:00:37
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 |
#4 · Zasláno: 22. 8. 2011, 13:08:54 · Upravil/a: Tori
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 * |
#5 · Zasláno: 22. 8. 2011, 16:13:24
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. |
||
Časová prodleva: 13 let
|
0