O.P. каза:
Проблемът е, че where
клауза филтрира набора от резултати, така че вашият тест за req.status
от 2 или 5 изхвърля всичко, където req.status
е нула, защото нито един ред не съответства на таблицата applications
.
Общият, теоретичен (тъй като нищо друго освен една тривиална реализация никога не би направила нещо подобно) ред на операции за select
изразът е:
- Произведете пълния декартов продукт на всяка таблица, посочена в
from
клауза. - Филтрирайте това, като приложите посочения
join
критерии и елиминирани редове, които не преминават посочените тестове. - Прилагане на критериите за филтриране, посочени в
where
клауза, премахваща редове, които не преминават посочените тестове. - Подредете набора от резултати на изразите, посочени в
group by
клауза и разделяне на набора от резултати в групи. - Свийте всяка такава група в един ред, като изчислите стойността на всички посочени агрегатни функции.
- Премахнете всички колони от набора с резултати, които не са изброени в
select
списък с колони с изявления. - Подредете този набор от крайни резултати според колоните/изразите, посочени в
order by
клауза.
Можете да направите едно от двете неща:
-
променете заявката си, за да тествате за нищожност:
where...( req.status is null OR req.status in (2,5) )...
-
преместете теста срещу
req.status
към критериите за присъединяване:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)