Autor | Zpráva | ||
---|---|---|---|
AM_ Profil |
#1 · Zasláno: 14. 3. 2009, 16:07:44
Zdravím, mám tento dotaz, pomocí kterého vybírám zaměstnance a dny, kdy mají službu:
SELECT employees.name, duties.date FROM employees LEFT JOIN duties ON duties.employee = employees.id WHERE date >= '2009-3-1' AND date < '2009-4-1' Potřeboval bych podmínku upravit tak, aby pro zaměstnance, kteří nemají daný měsíc službu, dotaz vrátil hodnoty jméno-NULL. Když vypustím podmínku WHERE, tak se to povede, jenže bez ohraničení období (což nechci), podmínka bohužel zaměstnance, kteří nemají v tomto měsíci službu, vyřadí. Napadlo mě k podmínce přidat OR date IS NULL, jenže pak se vyberou jen ti zaměstnanci, kteří mají službu v tomto měsíci, a ti, kteří ji nemají zadanou vůbec nikdy (takže chybí ti, kteří mají definované služby v jiných měsících, a ne v tomto). Máte někdo nějaký nápad, jak to efektivně udělat jedním dotazem? v nejhorším budu muset sahnout po méně efektivním řešení - v jednom dotazu vyberu služby, ve druhém všechny zaměstnance a následně data teprve v PHP vrstvě sloučím. |
||
Jan Tvrdík Profil |
#2 · Zasláno: 14. 3. 2009, 18:23:29
Jist si nejsem, ale zkus:
SELECT `employees`.`name`, IF (`date` >= '2009-3-1' AND `date` < '2009-4-1', `date`, NULL) AS `date` FROM employees LEFT JOIN duties ON duties.employee = employees.id |
||
AM_ Profil |
#3 · Zasláno: 15. 3. 2009, 12:02:14
Díky za nápad, bohužel výsledek je takový, že pro každou službu mimo vybraný měsíc to vrátí řádek "jméno-null", a tudíž dostávám stejnou dvojici jméno-null několikrát za sebou a dokonce i pro ty, kteří v tomto měsíci službu mají.
|
||
Kajman_ Profil * |
#4 · Zasláno: 16. 3. 2009, 20:12:38
SELECT employees.name, duties.date FROM employees LEFT JOIN duties ON duties.employee = employees.id AND date >= '2009-3-1' AND date < '2009-4-1' |
||
AM_ Profil |
#5 · Zasláno: 17. 3. 2009, 20:47:51
Kajman_
Díky, tohle mě nenapadlo, šlape to jak na drátku. Perfektní řešení, téma uzavírám. |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0