O.P. a dit :
Le problème est que le where
la clause filtre le jeu de résultats, donc votre test pour un req.status
de 2 ou 5 rejette tout ce qui contient req.status
est nul car aucune ligne ne correspond à la table applications
.
L'ordre général et théorique (puisque rien d'autre qu'une implémentation triviale ne ferait jamais quelque chose comme ça) pour un select
déclaration est :
- Produire le produit cartésien complet de chaque table répertoriée dans le
from
clause. - Filtrer cela en appliquant le
join
spécifié critères et lignes éliminées qui ne réussissent pas les tests spécifiés. - Appliquez les critères de filtrage spécifiés dans
where
clause, supprimant les lignes qui ne réussissent pas les tests spécifiés. - Ordonner l'ensemble de résultats sur les expressions spécifiées dans le
group by
clause et partitionnez le jeu de résultats en groupes. - Réduire chacun de ces groupes en une seule ligne, en calculant la valeur de toutes les fonctions d'agrégation spécifiées.
- Supprimer toutes les colonnes de l'ensemble de résultats qui ne sont pas répertoriées dans le
select
liste des colonnes des déclarations. - Ordonner cet ensemble de résultats finaux selon les colonnes/expressions spécifiées dans le
order by
clause.
Vous pouvez effectuer l'une des deux actions suivantes :
-
modifiez votre requête pour tester la nullité :
where...( req.status is null OR req.status in (2,5) )...
-
déplacer le test sur
req.status
aux critères d'adhésion :left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)