Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL đếm kết quả truy vấn phức tạp?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 1318 - Số lượng đối số không chính xác cho PROCEDURE

  2. Kiểm tra sự chồng chéo của các phạm vi ngày trong MySQL

  3. Chuyển đổi cơ sở dữ liệu mysql sang Oracle

  4. nhận các bản ghi liên tiếp trong mysql

  5. Nhận TỐI ĐA từ NHÓM BẰNG