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

Tìm thông báo mới nhất từ ​​bảng, được nhóm bởi người dùng trong mysql

Hãy thử cái này:

select * từ các thư không tồn tại (chọn 1 từ các thư mm ở đâu (mm.fromuser =m.fromuser hoặc mm.fromuser =m.touser) VÀ (mm.touser =m.touser hoặc mm.touser =m.fromuser) và mm.timestamp> m.timestamp) và m.fromuser ='user1' hoặc m.touser ='user1';

bản trình diễn tại đây .

Có lẽ sẽ tốt hơn, về sau, gắn cờ các cuộc trò chuyện giữa hai người dùng là một cuộc trò chuyện cụ thể, sau đó mọi tin nhắn thuộc về một cuộc hội thoại và do đó, việc tìm kiếm các cuộc hội thoại mà người dùng tham gia và thông tin về các tin nhắn liên quan đến cuộc hội thoại. Dù sao.

Hãy thử cái này để thay thế. Rất tiếc.

select m.* 
  from messages m 
     left join messages m2 
       on ((m.fromuser = m2.fromuser and m.touser = m2.touser) 
           or (m.fromuser = m2.touser and m.touser = m2.fromuser)) 
         and m.timestamp < m2.timestamp 
  where (m.fromuser = 'user1' or m.touser = 'user1') 
  and m2.id is null;

Nó có khả năng vượt trội hơn so với not exists phiên bản, ngay cả khi tôi cố gắng sửa lỗi đó.

fiddle này thực sự hoạt động




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách xóa bản ghi khỏi cơ sở dữ liệu bằng Ajax

  2. Mysql chọn Truy vấn với nhiều điều kiện của cùng một cột

  3. Truy vấn SQL khoảng không quảng cáo nhiều bảng phức tạp

  4. Mục tiêu MySQL trong Luigi workflow

  5. Đang tải thông báo lớp com.mysql.jdbc.Driver ... không được dùng nữa