O.P disse:
O problema é que o
where
cláusula filtra o conjunto de resultados, então seu teste para um req.status
de 2 ou 5 joga fora qualquer coisa onde req.status
é nulo porque nenhuma linha corresponde à tabela applications
. A ordem geral, teórica (já que nada além de uma implementação trivial faria algo assim) de operações para um
select
afirmação é:- Produza o produto cartesiano completo de cada tabela listada no
from
cláusula. - Filtre isso aplicando a
join
especificada critérios e linhas eliminadas que não passam nos testes especificados. - Aplicar os critérios de filtro especificados em
where
cláusula, removendo as linhas que não passam nos testes especificados. - Ordenar os resultados definidos nas expressões especificadas no
group by
cláusula e particione o conjunto de resultados em grupos. - Recolher cada grupo em uma única linha, computando o valor de todas as funções agregadas especificadas.
- Remova todas as colunas do conjunto de resultados que não estão listadas na
select
lista de colunas de instruções. - Ordenar estes resultados finais definidos pelas colunas/expressões especificadas no
order by
cláusula.
Você pode fazer uma das duas coisas:
-
altere sua consulta para testar a nulidade:
where...( req.status is null OR req.status in (2,5) )...
-
mova o teste parareq.status
para os critérios de junção:
left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)