O.P. ha detto:
Il problema è che il where
La clausola filtra il set di risultati, quindi il tuo test per un req.status
di 2 o 5 elimina qualsiasi cosa in cui req.status
è nullo perché nessuna riga corrisponde alla tabella applications
.
L'ordine delle operazioni generale, teorico (poiché nient'altro che un'implementazione banale farebbe mai qualcosa del genere) per una select
affermazione è:
- Produci il prodotto cartesiano completo di ogni tabella elencata nel
from
clausola. - Filtralo applicando il
join
specificato criteri e righe eliminate che non superano i test specificati. - Applica i criteri di filtro specificati in
where
clausola, rimuovendo le righe che non superano i test specificati. - Ordina i risultati impostati sulle espressioni specificate in
group by
clausole e partizioni i risultati impostati in gruppi. - Comprimi ciascuno di questi gruppi in una singola riga, calcolando il valore di tutte le funzioni aggregate specificate.
- Rimuovi tutte le colonne dal set di risultati che non sono elencate in
select
elenco delle colonne delle istruzioni. - Ordina questi risultati finali impostati in base alle colonne/espressioni specificate in
order by
clausola.
Puoi fare una di queste due cose:
-
cambia la tua query per verificare la nullità:
where...( req.status is null OR req.status in (2,5) )...
-
sposta il test su
req.status
ai criteri di adesione:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)