Autor Zpráva
wajta
Profil *
Ahoj, potřeboval bych pomoct při skládání podmínek.
Mám tabulku ID, Firma, Ico ...

ID Ico
1 12345678
2 88888888
3 NULL


Potřeboval bych vyhledávat podle ID a Ica

SELECT * FROM Adresar WHERE Id = neco AND Ico = neco - to je v pohode
Jenze nektere adresy nemaji vyplněné Ičo a tak je tam NULL

zkusil jsem toto:
SELECT * FROM Adresar WHERE Id = hodnota AND ICO = hodnota OR Ico IS NULL jebže to nedělá to, co si představuju.
Má představa je taková, že buď existuje kombinace ID + Ico, kde Ico obsahuje platnou hodnotu nebo existuje kombinace ID + Ico, kde Ico je NULL.

To mi ale nefunguje, protože když zadám např.
SELECT * FROM adresy WHERE ID = 3 AND Ico = 888888 OR IC NULL tak mi to ten záznam vrátí
Radek9
Profil
wajta:
Operátor AND má přednost před OR. Musíš použít závorky:
SELECT * FROM Adresar WHERE Id = hodnota AND (Ico = hodnota OR Ico IS NULL)
wajta
Profil *
Radek9:
Díky za odpověď, ale když spustim dotaz
SELECT * FROM Adresar WHERE Id = 3 AND (Ico = 88888888 OR Ico IS NULL) tak se mi vrátí řádek 3 což je špatně.

Já potřebuju, aby to něco vrátilo pouze v případě, že existuje kombinace ID a ICO, takze kombinace
ID Ico
1 12345678 - je správně
1 NULL - je špatně
1 444 - je špatně

3 NULL - je správně
3 444 - je špatně
Radek9
Profil
wajta:
Tomu se mi nechce úplně věřit. Mně to funguje.
wajta
Profil *
Radek9:
Když mírně upravím příklad
CREATE TABLE IF NOT EXISTS `adresar` (
`id` int(10) unsigned NOT NULL,
`ico` int(10) unsigned NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `adresar` (`id`, `ico`) VALUES
(1, 12345678),
(3, NULL);

tak bych potřeboval, aby prošly kombinace s ID 3 a Ico NULL, ale ID 3 a Ico = 12345678 už ne
Kajman
Profil
Kam má co procházet? Odkazovaný dotaz přece kombinaci (3,null) vrátí, kombinace (3,12345678) v tabulce uložená není, tak se nevrátí nikdy.
Firibix
Profil
Reakce na wajtu:
Předpokládejme: Na vstupu je nějaký formulář, kam se zadává ID a IČO a na základě vyplněných údajů se hledá v tabulce. Pokud je IČO vyplněné, pak musí sedět kombinace ID a IČO. Pokud IČO není vyplněné, pak musí sedět ID a v tabulce být IČO NULL.

Pokud je ten můj předpoklad správný, tak by správně měly být dvě podmínky, na základě toho, zda je ve formuláři IČO prázdné nebo ne:

1. IČO je vyplněné: WHERE Id = 3 AND Ico = 12345678
2. IČO není vyplněné: WHERE Id = 3 AND Ico IS NULL

Tvoje stávající podmínka totiž v případě, že v tabulce je IČO NULL, dovolí do formuláře zadat jako IČO cokoliv, jelikož vždy projde část OR Ico IS NULL.
blaaablaaa
Profil
wajta:
Myslím, že by to chtělo lepší příklad, pro tvou tabulku:
ID Ico
1 12345678
2 88888888
3 NULL

Jaké bys chtěl výsledky pro následující příklady?
ID 3, IČO 88888888
ID 3, IČO NULL,
ID 3, IČO 12345678
ID NULL, IČO 88888888
wajta
Profil *
Firibix:
Přesně tak, a já bych ty dvě podmínky chtěl sloučit do jednoho dotazu
Kajman
Profil
A jak chcete prázdnou hodnotu dávat do dotazu, abyste neporušil syntaxi? Nejjednodušší je vygenerovat dvě různé podmínky.

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