Autor Zpráva
Vladimír Iljič
Profil *
Dobrý den,

poprosím o radu co mám v tomto dotazu špatně?

select * from mesic where day='' and id between 5 and 15

potřebuji vybrat vše z tabulky červen kde sloupec day je prázdný a zároveň hodnota sloupce id je mezi 5 a 15ti
Keeehi
Profil
dotaz by měl být správně, pokud:
1) sloupec id je číselného typu
2) sloupec day je NOT NULL


pokud není 1 splněna, pak id between '5' and '15' - ale nevím, jak je to s podporou between u řetězců
pokud není 2 splněna, pak day is null

Jsou v tabulce data, které odpovíají této podmínce?
Vladimír Iljič
Profil *
Keeehi:
no ono právě že day může obsahovat hodnotu ale také nemusí, jinak vše ostatní odpovídá tj. id je int. :-)
Kajman_
Profil *
day může obsahovat hodnotu ale také nemusí
Pokud chcete hledat id i když je day null, tak třeba takto
where ifnull(`day`,'')='' and
Vladimír Iljič
Profil *
takže dotaz ted vypadá takto:

select * from $mesic_tab where ifnull(`day`,'')='' and id between $od and $do

ale mysql hlasi chybu:

right syntax to use near 'where ifnull(day,'')='' and id between 3 and 8' at line 1
Keeehi
Profil
Vladimír Iljič:
problém je tento: day='' není to samé jako day is null

příklad:
sloupec1 - NULL
sloupec2 - NOT NULL

INSERT INTO tabulka(sloupec1) VALUES (null);
sloupec1 je prázdný, má null
do sloupece 2 se pokoušíme nic neuložit, protože je to však zakázáno (NOT NULL - nesmí se nevložit) vloží se prázdný řetězec


SELECT * FROM tabulka WHERE sloupec1=''
- nevrátí nic, protože sloupec1 je prázdný (null)

SELECT * FROM tabulka WHERE sloupec2=''
- vrátí uložený řádek

SELECT * FROM tabulka WHERE sloupec1 is null
- vrátí uložený řádek

SELECT * FROM tabulka WHERE sloupec2 is null
- nevrátí nic, protože sloupec2 není null ale je to prázdný řetězec
Kajman_
Profil *
Co je v $mesic_tab?
Vladimír Iljič
Profil *
v proměnné $mesic_tab tab je měsíc (leden nebo únor,březen atd.) tam chyba není poněvadž to by mysql hlásilo table doesn't exists ne?

Keehi:
problém je tento: day='' není to samé jako day is null

to je sice pěkné, ale neprišel jsem na to jak mi to vše pomůže vyřešit muj problém :-)
Vladimír Iljič
Profil *
ono by to totiž asi fungovalo ale toto se zdá být dle hlášky spíš chybou v syntaxi nemám pravdu?
Keeehi
Profil
Vladimír Iljič:
Vypiš si výsledný sestavený dotaz.
echo "select * from $mesic_tab where ifnull(`day`,'')='' and id between $od and $do ";
Jak vypadá?
Vladimír Iljič
Profil *
vysledek echa:

select * from cerven where ifnull(`day`,'')='' and id between 3 and 7
Vladimír Iljič
Profil *
Omlouvám se všem chyba mezi klávesnicí a židlí jak jinak - $mesic_tab byla definována až po výše uvedeném dotazu, ještě jednou se omlouvám kdo můžete tak to prosím smažte

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