Autor Zpráva
Pata
Profil *
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
netestováno.
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
Tipuji: bílé znaky, malá/veklá (záleží na porovnání), ...
Pata
Profil *
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
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.
Pata
Profil *
Nějaká rada jak na ten filtr ? nějak jsem se v tom úplně zamotal :-(
Keeehi
Profil
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
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í?

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: