OP dijo:
El problema es que el where
La cláusula filtra el conjunto de resultados, por lo que su prueba para un req.status
de 2 o 5 arroja cualquier cosa donde req.status
es nulo porque ninguna fila coincide con la tabla applications
.
El orden de operaciones general y teórico (ya que nada más que una implementación trivial podría hacer algo como esto) para un select
declaración es:
- Produzca el producto cartesiano completo de cada tabla enumerada en el
from
cláusula. - Filtrar eso aplicando el
join
especificado criterios y filas eliminadas que no pasan las pruebas especificadas. - Aplicar los criterios de filtro especificados en el
where
cláusula, eliminando filas que no pasan las pruebas especificadas. - Ordenar los resultados establecidos en las expresiones especificadas en el
group by
cláusula y partición de los resultados establecidos en grupos. - Contraiga cada uno de estos grupos en una sola fila, calculando el valor de todas las funciones agregadas especificadas.
- Eliminar todas las columnas del conjunto de resultados que no aparecen en la lista
select
lista de columnas de declaraciones. - Ordene este conjunto de resultados finales por las columnas/expresiones especificadas en el
order by
cláusula.
Puede hacer una de estas dos cosas:
-
cambie su consulta para probar la nulidad:
where...( req.status is null OR req.status in (2,5) )...
-
mover la prueba contra en
req.status
al criterio de unión:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)