Portál AbcLinuxu, 15. května 2025 22:34

Dotaz: Nefunguje podmínka pro výběr sloupce v selectu

10.6.2011 00:27 hijacq
Nefunguje podmínka pro výběr sloupce v selectu
Přečteno: 333×
Odpovědět | Admin
Zdravím, v MYSQL mám jednoduchou tabulku a potřebuju podle sloupce "jazyk" vybrat další sloupec (pomiňme na okamžik fakt, že se jedná o špatný návrh databáze/tabulky - jen se to učím). Zkoušel jsem podmínky if i case, ale nefungují. Pokaždé se vybere první sloupec tzn. první podmínka vždy skončí true viz.
SELECT IF(STRCMP(jazyk, 'cs' ) , cesky, 'nijak') AS hodnota ... vždy vrátí sloupec cesky bez ohledu na jazyk
Kde dělám chybu a jak to přinutit dělat to co potřebuji?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.6.2011 01:53 VM
Rozbalit Rozbalit vše Re: Nefunguje podmínka pro výběr sloupce v selectu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A jaká jsou data? Pokud se v nich nikde 'cs' nevyskytuje, tak to funguje jak má.
10.6.2011 08:19 razor | skóre: 33
Rozbalit Rozbalit vše Re: Nefunguje podmínka pro výběr sloupce v selectu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak především doufám že víš, co dělá funkce strcmp. Vrací -1,0,1. 0(false) to vrátí, když jazyk bude 'cs'. To asi nechceš bych řekl.
10.6.2011 09:15 hijacq
Rozbalit Rozbalit vše Re: Nefunguje podmínka pro výběr sloupce v selectu
SELECT IF(jazyk='cs', cesky, 'nijak') AS hodnota ...
také nefunguje. Ve sloupci jazyk se samozřejmě střídá hodnota cs s hodnotami dalšími, abych viděl jak to funguje (resp. zde nefunguje).
10.6.2011 09:59 hijacq
Rozbalit Rozbalit vše Re: Nefunguje podmínka pro výběr sloupce v selectu
Tak jsem zjistil, že podmínka funguje, ale jen napoprvé, další řádky jsou vyhodnocovány stejně na základě prvního. Chová se to normálně, prokud je 2. a 3. parametr IFu normální řetězec, ale pro sloupec se to chová takhle. Možná problém s nepatrně rozdílnými datovými typy sloupců?
10.6.2011 10:00 kuka
Rozbalit Rozbalit vše Re: Nefunguje podmínka pro výběr sloupce v selectu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Doporucuji si udelat smysluplny select, tzn. vybrat i hodnoty jazyk a STRCMP(jazyk, 'cs') a cesky a z toho asi uz bude videt, kde je problem.
10.6.2011 11:29 VM
Rozbalit Rozbalit vše Re: Nefunguje podmínka pro výběr sloupce v selectu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mně analogický dotaz funguje. Asi by to chtělo poslat celý dotaz.
10.6.2011 23:28 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: Nefunguje podmínka pro výběr sloupce v selectu
Odpovědět | | Sbalit | Link | Blokovat | Admin
declare jazyk varchar(5);
select 'cs' into @jazyk;
select
   nejaky_sloupec,
   case
      when @jazyk = 'cs' then cesky
      when @jazyk = 'en' then anglicky
      else                    nijak
   end,
   dalsi_sloupec
from...

Aspon doufam, ze to nepletu. Konzultuj s manualem.

Dejv

Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
Dalibor Smolík avatar 11.6.2011 14:43 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: Nefunguje podmínka pro výběr sloupce v selectu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co si ve skriptu vytvořit dočasnou tabulku, kam budou kopírována data jen odpovídající jazyku "cs"? Vím, je to kostrabaté ..;-)
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
moo avatar 11.6.2011 19:03 moo | skóre: 7 | Praha
Rozbalit Rozbalit vše Re: Nefunguje podmínka pro výběr sloupce v selectu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Manual says:
If expr1 is TRUE (expr1 <> 0 and expr1 <> NULL) then IF() returns expr2; otherwise it returns expr3
a
STRCMP() returns 0 if the strings are the same
tak bud zmenit poradie expr2 a expr3 (nijak, cesky), alebo znegovat expr1 na !strcmp() ..

na mysql 5.1.56 funguje korektne; pokial to je stale nekorektne, budu imho problem v hodnotach a nie v mysql
End the FED!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.