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

MySQL Chọn THAM GIA 3 Bảng

Bạn sẽ cần hai phép nối. Một cái gì đó như sau sẽ giúp bạn bắt đầu (mặc dù tôi không hiểu 100% mối quan hệ giữa pm_datapm_info ):

SELECT pm_info.is_read, sender.usrFirst + ' ' + sender.usrLast as sender_name, 
    pm_data.date_sent, pm_data.title, pm_data.thread_id
FROM pm_info
INNER JOIN pm_data ON pm_info.thread_id = pm_data.thread_id
INNER JOIN tblUsers AS sender ON pm_data.sender_id = tblUsers.usrID
WHERE pm_info.receiver_id = @USER_ID /*in this case, 2*/
ORDER BY pm_data.date_sent DESC

Tôi giả định mối quan hệ giữa pm_datapm_info là id chủ đề. Nếu không, bạn có thể điều chỉnh những điều trên theo bất kỳ thứ gì bạn cần. Tôi cũng đã sắp xếp theo ngày gửi ở đây, nhưng nó sẽ không giữ các chuỗi lại với nhau . Tôi không chắc liệu bạn có muốn giữ chúng lại với nhau hay không theo cách bạn đã diễn đạt câu hỏi của mình.

Nếu bạn muốn giữ các chuỗi cùng nhau , bạn sẽ cần một truy vấn phức tạp hơn:

SELECT pm_info.is_read, sender.usrFirst + ' ' + sender.usrLast as sender_name, 
    pm_data.date_sent, pm_data.title, pm_data.thread_id
FROM pm_info
INNER JOIN pm_data ON pm_info.thread_id = pm_data.thread_id
INNER JOIN tblUsers AS sender ON pm_data.sender_id = tblUsers.usrID
INNER JOIN (SELECT thread_id, MAX(date_sent) AS max_date
            FROM pm_data
            GROUP BY thread_id) AS most_recent_date 
           ON pm_data.thread_id = most_recent_date.thread_id
WHERE pm_info.receiver_id = @USER_ID /*in this case, 2*/
ORDER BY most_recent_date.max_date DESC, pm_data.thread_id, 
    pm_data.date_sent DESC

Truy vấn này sử dụng một lựa chọn con để tìm ngày được sửa đổi gần đây nhất cho mỗi chuỗi, sau đó sắp xếp theo thứ này trước tiên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo một bảng cơ sở dữ liệu ActiveRecord không có:cột id?

  2. MySQL THAM GIA ĐẦY ĐỦ?

  3. MySQL sẽ không cho phép người dùng đăng nhập:Lỗi 1524

  4. mysql> tạo kiểm tra cơ sở dữ liệu; LỖI 1006 (HY000):Không thể tạo 'kiểm tra' cơ sở dữ liệu (errno:2)

  5. Tối ưu hóa tìm kiếm MySQL bằng cách sử dụng ký tự đại diện và thích