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)