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

MYSQL THAM GIA trên nhiều bảng không trả về kết quả

Có 2 vấn đề:

  1. Bạn cần một LEFT JOIN trên bạn bè. LEFT JOIN cho biết trả về tất cả các bản ghi từ bảng đầu tiên trong phép nối ngay cả khi không có kết quả nào được tìm thấy trong bảng thứ hai trong phép nối. Bạn cũng nên WHERE điều kiện điều khoản liên quan đến friends vào LEFT JOIN , để các điều kiện xảy ra tại phép nối. Bạn cũng nên sử dụng m.id bất cứ khi nào có thể bằng cách tham gia của bạn thay vì $myId để loại bỏ sự dư thừa.
  2. Mệnh đề WHERE của bạn quá hạn chế (điều kiện thừa). Luôn sử dụng bộ điều kiện đơn giản nhất có thể và đặt càng nhiều điều kiện càng thích hợp tại JOIN để chúng dễ đọc hơn.

Ví dụ (Đã chỉnh sửa để thêm bài đăng từ bạn bè):

$query = "SELECT DISTINCT `u`.`id`, `p`.`byuser`, `p`.`newpost`, `p`.`id`, `p`.`postdate`
          FROM `users` AS `u`
          LEFT JOIN `friends` AS `f` 
              ON `f`.`userid` = `u`.`id` 
              OR `f`.`friendid` = `u`.`id`
          JOIN `pinnwand` AS `p` 
              /* This will get all posts made by the user */
              ON `p`.`byuser` = `u`.`id` 
              /* This will get all posts made TO the user by friends */
              OR (`p`.`byuser` IN (`f`.`userid`, `f`.`friendid`)
                  AND `p`.`touser` = `u`.`id`)
          WHERE `u`.`id` = {$myId}
              AND `p`.`publicp` < 3 
              AND `p`.`typ` = 2
          ORDER BY `p`.`id` DESC 
          LIMIT {$limit}, 10";


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dấu thời gian (tự động) được cập nhật khi nào?

  2. MySQL - Chuyển đổi MM / DD / YY sang nhãn thời gian Unix

  3. Cập nhật SQL một cột từ một cột khác trong bảng khác

  4. Làm thế nào để ước tính thời gian truy vấn SQL?

  5. Hiển thị giá trị cột đơn của truy vấn mysqli