O.P. cho biết:
Vấn đề là where
mệnh đề lọc tập hợp kết quả, vì vậy kiểm tra của bạn cho một req.status
trong số 2 hoặc 5 ném ra bất kỳ thứ gì trong đó req.status
là null vì không có hàng nào phù hợp với bảng applications
.
Thứ tự hoạt động chung, lý thuyết (vì không có gì ngoài việc triển khai tầm thường sẽ thực sự làm bất cứ điều gì như thế này) thứ tự hoạt động cho một select
tuyên bố là:
- Sản xuất toàn bộ sản phẩm cacte của từng bảng được liệt kê trong
from
mệnh đề. - Lọc điều đó bằng cách áp dụng
join
được chỉ định tiêu chí và loại bỏ các hàng không vượt qua các bài kiểm tra được chỉ định. - Áp dụng các tiêu chí lọc được chỉ định trong
where
, xóa các hàng không vượt qua các bài kiểm tra đã chỉ định. - Sắp xếp thứ tự các kết quả được đặt trên các biểu thức được chỉ định trong nhóm
group by
mệnh đề và phân chia kết quả được thiết lập thành các nhóm. - Thu gọn từng nhóm như vậy thành một hàng, tính toán giá trị của tất cả các hàm tổng hợp được chỉ định.
- Xóa tất cả các cột khỏi tập hợp kết quả không được liệt kê trong
select
danh sách cột báo cáo. - Sắp xếp thứ tự kết quả cuối cùng này được đặt theo các cột / biểu thức được chỉ định trong
order by
mệnh đề.
Bạn có thể làm một trong hai điều:
-
thay đổi truy vấn của bạn để kiểm tra tính vô hiệu:
where...( req.status is null OR req.status in (2,5) )...
-
di chuyển kiểm tra trên
req.status
theo tiêu chí tham gia:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)