为每个用户选择几条记录 - SQL

时间:2013-09-02 04:57:17

标签: mysql

我使用消息表构建聊天应用程序。

我尝试为每个与特定用户对应的用户选择3条最近的消息 像那样: 用户17有3个与他通信的用户,为每个用户选择最后3条消息

  

17 22

     

22 17

     

22 17

     
     

19 17

     

17 19

     

19 17

     
     

21 17

     

17 21

     

17 21

我尝试编写查询,除了一个用户之外,我得到了所有用户的好结果 - 第一个或最后一个用户 为他选择超过3条消息。 查询:

    SELECT *, 
         DATE_FORMAT((FROM_UNIXTIME(m1.create_time)),'%k:%i, %d.%m.%Y') 
         as create_time_display
    FROM t_messages m1
    WHERE (m1.to =17 OR m1.from =17)  AND (
        SELECT COUNT(*) 
        FROM t_messages  m2
        WHERE m1.from = m2.from AND m2.id >= m1.id AND
        (m2.to = 17 OR m2.from = 17)
    ) <=3`

任何想法如何让它运作良好?

感谢。

1 个答案:

答案 0 :(得分:0)

SELECT m1.*, 
       DATE_FORMAT(FROM_UNIXTIME(m1.create_time),'%k:%i, %d.%m.%Y') 
       as create_time_display
FROM t_messages m1
WHERE (m1.to=17 OR m1.from=17) AND 
      (SELECT COUNT(1) 
       FROM t_messages m2
       WHERE m2.id >= m1.id AND
            (m2.to=17 and m2.from=m1.from OR m2.from=17 and m2.to=m1.to)
      ) <=3

如果t_messages.id是自动增量密钥,则对其进行比较是正确的,否则您应该比较t_messages.create_time s