phpMyAdmin
 sql >> база данни >  >> Database Tools >> phpMyAdmin

Създаване на списък със съобщения в SQL

Мисля, че вашата заявка дава „правилните“ резултати, като че ако искате да видите последното съобщение в някои от разговорите, наистина трябва да групирате по conversation_id . Все пак не виждам това поле в схемата.

Ако направите WHERE sender_id = 3 GROUP BY receiver_id , тогава е правилно, че заявката ви връща съобщения 1 и 7, защото тези съобщения са били изпратени до различни хора, така че във вашия дизайн те са различни разговори.

Ако искате да видите само последното изпратено от вас съобщение като цяло, просто премахнете GROUP BY във втората част на вашия UNION . В противен случай помислете за препроектиране на вашата схема.

РЕДАКТИРАНЕ:

Опитайте тази заявка:

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

Някои бележки:

  1. UNION вече не е необходимо;
  2. Този подход ще третира всички имейли между две страни като един разговор, което не винаги е вярно. Може да искате да преработите този подход;
  3. Лош е стилът да се използват запазени думи (като date). ) за имена на колони или псевдоними, опитайте се да избегнете това. Или използвайте обратни отметки, ако ги използвате.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. импортирайте mysql база данни, експортирана с phpmyadmin в локален стек на лампите

  2. Грешка в съхранението на конфигурацията на phpMyAdmin

  3. mysql:DELIMITER синтактична грешка на ред 1

  4. PHP Вмъкване в синтактична грешка на MySQL

  5. SQL заявка връща грешни резултати