Autor | Zpráva | ||
---|---|---|---|
wajta Profil * |
#1 · Zasláno: 16. 11. 2021, 10:28:06
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 |
#2 · Zasláno: 16. 11. 2021, 10:31:55
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 * |
#3 · Zasláno: 16. 11. 2021, 10:51:21
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 * |
#5 · Zasláno: 16. 11. 2021, 11:40:52
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 |
#6 · Zasláno: 16. 11. 2021, 12:37:42
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 |
#7 · Zasláno: 16. 11. 2021, 13:19:04
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 |
#8 · Zasláno: 16. 11. 2021, 14:38:02
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 * |
#9 · Zasláno: 16. 11. 2021, 15:07:07
Firibix:
Přesně tak, a já bych ty dvě podmínky chtěl sloučit do jednoho dotazu |
||
Kajman Profil |
#10 · Zasláno: 16. 11. 2021, 15:29:20
A jak chcete prázdnou hodnotu dávat do dotazu, abyste neporušil syntaxi? Nejjednodušší je vygenerovat dvě různé podmínky.
|
||
Časová prodleva: 2 roky
|
0