O.P.のコメント:
問題は、where
句は結果セットをフィルタリングするため、req.status
のテスト 2または5の場合、req.status
の場所はすべてスローされます。 テーブルapplications
に一致する行がないため、nullになります 。
select
の操作の一般的、理論的(些細な実装だけが実際にこのようなことを行うため)順序 ステートメントは次のとおりです:
-
from
にリストされている各テーブルの完全なデカルト積を生成します 条項。 - 指定された
join
を適用してフィルタリングします 指定されたテストに合格しない基準と削除された行。 -
where
で指定されたフィルター基準を適用します 句、指定されたテストに合格しない行を削除します。 -
group by
で指定された式に設定された結果を並べ替えます 結果セットをグループにまとめて分割します。 - このような各グループを1つの行にまとめて、指定されたすべての集計関数の値を計算します。
-
select
にリストされていないすべての列を結果セットから削除します ステートメント列リスト。 - この最終結果セットを
order by
で指定された列/式で並べ替えます 条項。
次の2つのいずれかを実行できます:
-
クエリを変更してnullをテストします:
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)