Vấn đề của bạn là, truy vấn của bạn không trả về những gì bạn nghĩ là nó trả về (nó luôn giúp bạn chạy truy vấn độc lập, để xem liệu tập hợp kết quả có như những gì bạn mong đợi hay không).
Được rồi, hãy chia nhỏ điều này.
Bạn đang thử đếm tất cả các bài đăng không có một bản ghi phù hợp trong bảng taxi, cho userID đó. Điều bạn muốn ở đây là JOIN
các bảng và lấy các hàng đó trong post
mà thông thường sẽ bị loại trừ bởi tham gia. Điều này đạt được nhờ một phép nối bên ngoài bên trái
( đã chỉnh sửa )
SELECT p.ID, t.taxiID
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL
HAVING
đó mệnh đề đang nói:chỉ những hàng trong tập kết quả không có t.taxiID tương ứng.
Nếu bạn chạy truy vấn này và nhận được tập hợp các hàng mong đợi (các bài đăng không được người dùng đó thích hoặc không thích) THÌ bạn có thể thêm một truy vấn bên ngoài để đếm số hàng được trả về:
SELECT COUNT(*) as count FROM (
SELECT p.ID, t.taxiID
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL
) a
Điều này sẽ trả về một số vô hướng duy nhất có tên. Trong trường hợp này, bạn có thể nói:
if ($count[0]->count > 10) { blah blah blah }
( Lần chỉnh sửa thứ hai ) Truy vấn bên trong này sẽ giúp bạn có được những bài đăng có giá trị =1 trong bảng taxi hoặc không có giá trị nào, dẫn đến kết quả là 4 được trả về cho ví dụ của bạn:
SELECT p.ID, t.taxiID, t.value
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL OR t.value = 1