Mysql
 sql >> база данни >  >> RDS >> Mysql

Намиране на последното съобщение от таблицата, групирано по потребител в mysql

Изпробвайте това:

изберете *от съобщения, където не съществува (изберете 1 от съобщения mm, където (mm.fromuser =m.fromuser или mm.fromuser =m.touser) И (mm.touser =m.touser или mm.touser =m.fromuser) и mm.timestamp> m.timestamp)и m.fromuser ='user1' или m.touser ='user1';

демо тук .

Вероятно би било по-добре в бъдеще да маркирате разговорите между двама потребители като конкретен разговор, тогава всяко съобщение принадлежи на разговор и по този начин става много по-лесно да намерите разговори, в които потребителят участва, и информация за съобщения, свързани с разговор. Както и да е.

Опитайте този вместо това. Уф.

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;

Вероятно е по-добро от not exists версия, дори и да успея да я поправя.

тази цигулка всъщност работи




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване на няколко реда с PDO

  2. Вмъкване на данни, ако броят на редовете е по-голям от 0, не работи

  3. Laravel:подреждане по къде в

  4. php echo не работи

  5. Трябва ли да използвам mysql_real_escape_string, ако свързвам параметри?