Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有结果限制的SQL_Sql_Chat - Fatal编程技术网

具有结果限制的SQL

具有结果限制的SQL,sql,chat,Sql,Chat,我正在做一个简单的聊天,需要一种方法,只获得10条“消息”公关对话,但不知道如何做到这一点 这是我已经尝试过的。 我的SQL: 现在我得到了用户ID 1234的所有消息。。。但我只想要10条公共对话信息 希望有意义标准SQL方法是使用窗口/分析函数: SELECT t.* FROM (SELECT c.*, su.name as sender_name, ru.name as receiver_name, row_number() over (partition by

我正在做一个简单的聊天,需要一种方法,只获得10条“消息”公关对话,但不知道如何做到这一点

这是我已经尝试过的。 我的SQL:

现在我得到了用户ID 1234的所有消息。。。但我只想要10条公共对话信息


希望有意义

标准SQL方法是使用窗口/分析函数:

SELECT t.*
FROM (SELECT c.*, su.name as sender_name, ru.name as receiver_name,
             row_number() over (partition by c.conversation order by c.created desc) as seqnum
      FROM chat c INNER JOIN
           users su
           ON su.id = c.sender_user_id INNER JOIN
           users ru
           ON ru.id = c.receiver_user_id
      WHERE sender_user_id = '1234' OR receiver_user_id = '1234'
     ) t
WHERE seqnum <= 10
ORDER BY created ASC;

您需要一种在标准SQL中工作的技术,还是忘记标记问题了?是的。例如,选择MSSQL的前10个*和MySQL的限制10。让我加入Oracle的乐趣:。。。。。。。如果rownum()没有看到DDL,就有点难以确定地回答,特别是(我怀疑)您有两个名为
id
(chat.id和users.id)的列,我希望可以在MySQL中完成,我的错。非常感谢。。。但我得到了这个错误:语法使用near'(按c.conversation order按c.created desc划分)作为seqnum。。。知道吗?你在用哪个数据库?SQL server 2008不支持此语法。
SELECT t.*
FROM (SELECT c.*, su.name as sender_name, ru.name as receiver_name,
             row_number() over (partition by c.conversation order by c.created desc) as seqnum
      FROM chat c INNER JOIN
           users su
           ON su.id = c.sender_user_id INNER JOIN
           users ru
           ON ru.id = c.receiver_user_id
      WHERE sender_user_id = '1234' OR receiver_user_id = '1234'
     ) t
WHERE seqnum <= 10
ORDER BY created ASC;
SELECT t.*
FROM (SELECT c.*, su.name as sender_name, ru.name as receiver_name,
             (@rn := if(@c = c.conversation, @rn + 1,
                        if(@c := c.conversation, 1, 1)
                       )
             ) as seqnum
      FROM chat c INNER JOIN
           users su
           ON su.id = c.sender_user_id INNER JOIN
           users ru
           ON ru.id = c.receiver_user_id CROSS JOIN
           (SELECT @c := 0, @rn := 0) vars
      WHERE sender_user_id = '1234' OR receiver_user_id = '1234'
      ORDER BY c.conversation, c.created desc
     ) t
WHERE seqnum <= 10
ORDER BY created ASC;