O.P. řekl:
Problém je v tom, že where klauzule filtruje sadu výsledků, takže váš test na req.status 2 nebo 5 vyhodí cokoli, kde je req.status je null, protože žádný řádek neodpovídá tabulce applications .
Obecné, teoretické (protože nic jiného než triviální implementace by ve skutečnosti nikdy nic takového neudělalo) pořadí operací pro select prohlášení je:
- Vytvořte úplný kartézský součin každé tabulky uvedené v
fromdoložka. - Odfiltrujte to použitím zadaného
joinkritéria a eliminované řádky, které neprošly zadanými testy. - Použijte kritéria filtru uvedená v
whereklauzule, odstranění řádků, které neprošly zadanými testy. - Seřaďte sadu výsledků podle výrazů zadaných v
group byklauzule a rozdělte sadu výsledků do skupin. - Každou takovou skupinu sbalte do jednoho řádku a vypočítejte hodnotu všech zadaných agregačních funkcí.
- Odeberte ze sady výsledků všechny sloupce, které nejsou uvedeny v
selectseznam sloupců výpisů. - Seřaďte tyto konečné výsledky podle sloupců/výrazů uvedených v
order bydoložka.
Můžete udělat jednu ze dvou věcí:
-
změňte svůj dotaz tak, aby testoval nulitu:
where...( req.status is null OR req.status in (2,5) )... -
přesuňte test proti
req.statuske kritériím spojení:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)