Autor | Zpráva | ||
---|---|---|---|
Pata Profil * |
#1 · Zasláno: 17. 1. 2016, 15:30:48
Dobrý den,
mám tento kód "SELECT *,m.id as mid FROM movie m LEFT JOIN movie_titles t on m.id=t.movie_id WHERE t.language='$language' or t.language='en' GROUP BY t.movie_id Order by m.rate DESC LIMIT 0,15" $language obsahuje 'cs' Vse vypise jak ma, ale kdyz je language třeba 'it' dá to přednost EN, asi že v abecedě je EN dřív, aspon jsem to tak pochopil. Jak na podmínku v tomto sql dotazu, že když t.language obsahuje hodnotu co je v $language a kdyz ne, tak az poté vypsat en ? Diky |
||
Lonanek Profil |
Pokud jsem dotaz správně pochopil, mělo by pomoci:
WHERE t.language = CASE WHEN (t.language ='$language') THEN '$language' ELSE 'en' END |
||
Pata Profil * |
s CS v language to jede, ale napriklad s ES to nejde, misto toho se vypise to EN
Pritom tam ES je |
||
Lonanek Profil |
#4 · Zasláno: 17. 1. 2016, 17:42:19
Tipuji: bílé znaky, malá/veklá (záleží na porovnání), ...
|
||
Pata Profil * |
#5 · Zasláno: 17. 1. 2016, 17:45:59
Lonanek:
To je pravda, v db to je velkym a ja to volám malým z url, tak Já to zkusim jak dojdu domu, nenapadlo, že by to mohlo mit vliv |
||
Keeehi Profil |
#6 · Zasláno: 17. 1. 2016, 17:56:32
Pata:
Problém je v tomto: Ta podmínka nedává přednost nebo tak něco. Ta prostě nechá filtrem projít dva řádky. Nejlepší bude příklad id lang name 1 cs name cs 1 en name en 1 it name it Po provedení t.lang='it' or t.lang='en' zbydou jen 2 řádky.
id lang name 1 en name en 1 it name it Na ně se pustí GROUP BY id a zde nastává problém. Group by z toho vytvoří jeden řádek, ale jak? Tak u sloupce id je to jednoduché, protože se podle něj Groupuje, tak tam musí být jen jedna hodnota, tak se použije ta. Ovšem u ostatních dvou sloupců je problém. Tam se neví, jaká hodnota by se měla použít. Některé databáze by v tomto místě zahlásili problém a sloupce lang a name by tě vůbec nenechali vypsat (část za SELECT). MySQL tě to udělat nechá. Ovšem chování je v takovém případě nedefinované. Představ si to tak, že se náhodně rozhodne, který z řádků použije.
Proto bych nepoužíval GROUP BY ale použil bych ORDER BY id, lang='en' a filtr si udělal až na výpisu.
|
||
Časová prodleva: 5 dní
|
|||
Pata Profil * |
#7 · Zasláno: 22. 1. 2016, 17:09:53
Nějaká rada jak na ten filtr ? nějak jsem se v tom úplně zamotal :-(
|
||
Keeehi Profil |
#8 · Zasláno: 22. 1. 2016, 17:18:59
Normálně až při výpisu v PHP. V cyklu, kde se to vypisuje si vždy zkontroluješ IDčko předešlého článku a pokud se shoduje s aktuálním tak ten aktuální prostě nevypíšeš.
|
||
Lonanek Profil |
#9 · Zasláno: 22. 1. 2016, 17:20:13
Jak již uvedl Keeehi
„použil bych ORDER BY id, lang='en' a filtr si udělal až na výpisu.“
Proč to nechcete řešit ve scriptu, který se postará o výpis toho co potřebujete? Pokud budou nalezeny 2 záznamy, je to požadovaný jazyk + "en". Pokud je nalezen pouze jeden záznam, je to pouze "en". Není to jednodušší řešení? |
||
Časová prodleva: 7 let
|
0