O.P. sagde:
Problemet er, at where
klausul filtrerer resultatsættet, så din test for en req.status
af 2 eller 5 smider alt ud, hvor req.status
er null, fordi ingen række matchede tabellen applications
.
Den generelle, teoretiske (da intet andet end en triviel implementering nogensinde ville gøre noget lignende) operationsrækkefølge for en select
erklæringen er:
- Producer det fulde kartesiske produkt af hver tabel, der er angivet i
from
klausul. - Filtrer det ved at anvende den angivne
join
kriterier og eliminerede rækker, der ikke består de angivne tests. - Anvend filterkriterierne angivet i
where
klausul, fjernelse af rækker, der ikke består de angivne tests. - Bestil resultaterne på de udtryk, der er angivet i
group by
klausul og opdel resultaterne i grupper. - Skjul hver sådan gruppe i en enkelt række, og udregn værdien af alle specificerede aggregerede funktioner.
- Fjern alle kolonner fra resultatsættet, der ikke er angivet i
select
kolonneliste med udsagn. - Bestil disse endelige resultater indstillet efter de kolonner/udtryk, der er angivet i
order by
klausul.
Du kan gøre en af to ting:
-
ændre din forespørgsel til at teste for ugyldighed:
where...( req.status is null OR req.status in (2,5) )...
-
flyt testen mod på
req.status
til sammenslutningskriterierne:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)