phpMyAdmin
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> phpMyAdmin

Tạo danh sách thư trong SQL

Tôi nghĩ rằng truy vấn của bạn đang tạo ra kết quả “phù hợp”, như thể bạn muốn xem thông báo cuối cùng trong một số cuộc hội thoại, bạn thực sự nên nhóm theo conversation_id . Tôi không thấy trường này của bạn trong lược đồ.

Nếu bạn làm WHERE sender_id = 3 GROUP BY receiver_id , thì đúng rồi, truy vấn đó trả về cho bạn thông báo 1 và 7, vì những thư đó đã được gửi đến người khác mọi người, do đó trong thiết kế của bạn, họ là những cuộc trò chuyện khác nhau.

Nếu bạn chỉ muốn xem tin nhắn cuối cùng do bạn gửi nói chung, chỉ cần xóa GROUP BY trong phần thứ hai của UNION của bạn . Nếu không, hãy xem xét thiết kế lại giản đồ của bạn.

CHỈNH SỬA:

Hãy thử truy vấn này:

SELECT m.message_id, u.username, m.subject, m.message,
       m.status, UNIX_TIMESTAMP(m.date) as `date`
  FROM users u
  LEFT JOIN messages m ON m.sender_id = u.id
 WHERE m.message_id IN (
    SELECT max(message_id) 
      FROM messages
     WHERE receiver_id = 3 OR sender_id = 3
     GROUP BY least(sender_id,receiver_id), 
              greatest(sender_id,receiver_id)
    );

Một số lưu ý:

  1. UNION không cần thiết nữa;
  2. Cách tiếp cận này sẽ coi tất cả các e-mail giữa 2 bên là một cuộc trò chuyện duy nhất, điều này không phải lúc nào cũng đúng. Bạn có thể muốn thiết kế lại phương pháp này;
  3. Sử dụng các từ dành riêng (như date là một phong cách tồi ) đối với tên hoặc bí danh của cột, hãy cố gắng tránh điều này. Hoặc sử dụng que tính ngược nếu bạn sử dụng chúng.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Truy vấn SQL max (), count ()

  2. WAMP:phpmyadmin đột ngột bị hỏng

  3. Thay đổi cổng của máy chủ Mysql trong Phpmyadmin

  4. Cách thay đổi mật khẩu cho MySQL Console trong WAMP 2.5

  5. xampp localhost phpmyadmin Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:CÓ)