O.P. sa:
Problemet är att where
klausul filtrerar resultatuppsättningen, så ditt test för en req.status
av 2 eller 5 kastar ut allt där req.status
är null eftersom ingen rad matchade tabellen applications
.
Den allmänna, teoretiska (eftersom inget annat än en trivial implementering faktiskt skulle göra något liknande detta) operationsordning för en select
uttalandet är:
- Ta fram den fullständiga kartesiska produkten för varje tabell som anges i
from
klausul. - Filtrera det genom att använda den angivna
join
kriterier och eliminerade rader som inte klarar de angivna testerna. - Använd filterkriterierna som anges i
where
sats, tar bort rader som inte klarar de angivna testerna. - Ordna resultaten som anges på uttrycken som anges i
group by
klausul och partitionera resultaten i grupper. - Komprimera varje sådan grupp till en enda rad och beräkna värdet för alla angivna aggregatfunktioner.
- Ta bort alla kolumner från resultatuppsättningen som inte är listade i
select
kolumnlista för uttalanden. - Beställ detta slutliga resultat efter kolumner/uttryck som anges i
order by
klausul.
Du kan göra en av två saker:
-
ändra din fråga för att testa för ogiltighet:
where...( req.status is null OR req.status in (2,5) )...
-
flytta testet mot
req.status
till anslutningskriterierna:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)