Autor Zpráva
gardener
Profil
Zdravím Mám takový menší problém
Pokud pošlu dotaz na DB ve formátu např:
mysql_query("SELECT * FROM seznam WHERE 'Finsko' in (interpret,album,styl,zeme_puvodu)")

Dostanu výsledek s tím co hledám..

Pokud ale do výběru sloupců zařadím jakýkolliv sloupec který obsahuje datový typ int nebo year


Je mi vrácen celý obsah db, stejně jako bych napsal SELECT * FROM seznam....

Problém je v tom, že bych rád takto vyhledával i například podle roku, nebo id..

Tuší někdo prosím,jak by se to dalo vyřešit?

Díky za každou radu..
TomášK
Profil
MySQL dokumentace:
You should never mix quoted and unquoted values in an IN list because the comparison rules for quoted values (such as strings) and unquoted values (such as numbers) differ. Mixing types may therefore lead to inconsistent results.

Aneb v IN by nikdy neměl být INT a řetězec naráz. Řešením je tedy přetypovat INT na řetězec (možná budeš potřebovat nastavit správnou COLLATE (jak je to česky?), narazil jsem na to, když jsem to zkoušel):
SET NAMES utf8 COLLATE utf8_czech_ci;
SELECT * FROM osoby WHERE '0' IN (jmeno, CAST(id AS CHAR))
Vanama
Profil
COLLATE (jak je to česky?)

Porovnávání ? :)
Kajman_
Profil *
A jednodušší bude tam narvat samé or, tam se to přetypuje samo.
gardener
Profil
.
gardener
Profil
Tak CAST je bohužel nefunkční:
Illegal mix of collations for operation ' IN '
s tím OR všude si také nejsem jist, zda by to fungovalo správně, a hlavně při takovém počtu OR je to jen otázka času, kdy něco zapomenu změnit a dotaz nebude pracovat korektně.

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