phpMyAdmin
 sql >> Teknologi Basis Data >  >> Database Tools >> phpMyAdmin

Membuat daftar pesan di SQL

Saya pikir kueri Anda menghasilkan hasil yang "benar", seolah-olah Anda ingin melihat pesan terakhir di beberapa percakapan, Anda harus benar-benar mengelompokkan menurut conversation_id . Saya tidak melihat Anda dalam bidang ini dalam skema.

Jika Anda melakukan WHERE sender_id = 3 GROUP BY receiver_id , maka benar, kueri itu mengembalikan Anda pesan 1 dan 7, 'karena pesan-pesan itu telah dikirim ke berbeda orang, jadi dalam desain Anda, mereka adalah percakapan yang berbeda.

Jika Anda hanya ingin melihat pesan terakhir yang dikirim oleh Anda secara umum, hapus saja GROUP BY di bagian kedua UNION . Anda . Jika tidak, pertimbangkan untuk mendesain ulang skema Anda.

EDIT:

Coba kueri ini:

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)
    );

Beberapa catatan:

  1. UNION tidak diperlukan lagi;
  2. Pendekatan ini akan memperlakukan semua email antara 2 pihak sebagai satu percakapan, yang tidak selalu benar. Anda mungkin ingin mendesain ulang pendekatan ini;
  3. Ini adalah gaya yang buruk untuk menggunakan kata-kata khusus (seperti date ) untuk nama atau alias kolom, coba hindari ini. Atau gunakan backtick jika Anda menggunakannya.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Cara mengimpor file sql besar di phpmyadmin

  2. Cara Mengatasi XAMPP 1.7.7 - PHPMyAdmin - MySQL Error #2002 di Ubuntu

  3. saat mengekspor data dari phpmyadmin kembali ke halaman kueri sql

  4. Bagaimana cara mengekspor kolom tertentu di MySQL menggunakan phpmyadmin?

  5. Mengimpor lembar Excel ke phpMyAdmin