Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQL mendapatkan pesan terakhir dari/ke pengguna tertentu

Saya menggunakan SQL Server 2008, Anda tidak menyebutkan database mana yang Anda gunakan.

Dari informasi yang Anda berikan, kueri Anda tampaknya terlalu rumit untuk keluaran yang Anda butuhkan. Berikut kueri sederhana untuk mendapatkan semua pesan yang melibatkan pengguna 36:

SELECT  
       sender.msg_user_name AS sender_user_name
       ,recipient.msg_user_name AS recipient_user_name
       ,msg_date
       ,msg_text

FROM    
       dbo.Fed_Messages 

       INNER JOIN dbo.Fed_User AS sender 
       ON sender.msg_user_id = sender_user_id

       INNER JOIN dbo.Fed_User AS recipient 
       ON recipient.msg_user_id = recipient_user_id

WHERE   
       sender_user_id = 36
       OR recipient_user_id = 36

ORDER BY
       msg_date DESC

Saya harus mengubah beberapa nama bidang seperti di SQL Server beberapa nama yang Anda pilih adalah kata-kata yang dicadangkan.

SQL Fiddle:http://sqlfiddle.com/#!3/b8e88/1

EDIT: Sekarang Anda telah menambahkan beberapa informasi lagi, dan menunjukkan ada id pada tabel pesan, Anda dapat menggunakan sesuatu seperti ini (catatan:Saya memiliki SQL Server sehingga Anda mungkin harus mengubah kueri untuk MySQL):

SELECT  sender.msg_user_name AS sender_user_name
       ,recipient.msg_user_name AS recipient_user_name
       ,msg_date
       ,msg_text
FROM    dbo.Fed_Messages
        INNER JOIN dbo.Fed_User AS sender ON sender.msg_user_id = sender_user_id
        INNER JOIN dbo.Fed_User AS recipient ON recipient.msg_user_id = recipient_user_id
        INNER JOIN ( SELECT MAX(id) AS most_recent_message_id
                     FROM   dbo.Fed_Messages
                     GROUP BY CASE WHEN sender_user_id > recipient_user_id
                                   THEN recipient_user_id
                                   ELSE sender_user_id
                              END -- low_id
                           ,CASE WHEN sender_user_id < recipient_user_id
                                 THEN recipient_user_id
                                 ELSE sender_user_id
                            END -- high_id
                   ) T ON T.most_recent_message_id = dbo.Fed_Messages.id
WHERE   sender_user_id = 36
        OR recipient_user_id = 36
ORDER BY msg_date DESC

SELECT di FROM bagian dari kueri menemukan pesan terbaru (berdasarkan id , Saya berasumsi itu adalah nomor yang bertambah secara otomatis) untuk setiap pasangan id pengguna pengirim/penerima yang dipesan. Hasilnya digabungkan kembali ke Fed_Messages tabel untuk memastikan kami mendapatkan nama pengirim/penerima yang benar.

SQL Fiddle yang diperbarui:http://sqlfiddle.com/#!3/1f07a/2




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghentikan bidang desimal MySQL agar tidak dibulatkan?

  2. Menggambar Banyak Poligon di Google Maps API v3 dari database MySQL

  3. Cara menghapus kolom dari tabel di MySQL

  4. Bagaimana cara memeriksa apakah koneksi C# — MySQL saya berhasil atau, jika tidak, kembalikan mengapa?

  5. MySQL ::Pilih dari string yang dipisahkan koma