Autor Zpráva
AM_
Profil
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
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
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 *
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
Kajman_
Díky, tohle mě nenapadlo, šlape to jak na drátku.

Perfektní řešení, téma uzavírám.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0