Mysql - 从结果中动态获取索引位置,以将其放入另一个查询的 OFFSET 中,在同一个咨询中

问题描述 投票:0回答:2

我在 tbl_messages 表中有一个包含 id 列(_id,整数)和 post_id 列(_post_id,字符串)的表。

我想做一个查询,在没有 LIMIT 的情况下,我可以知道行在简单查询中的位置,将其放在 OFFSET 中。

我可以进行查询并在 PHP 中使用 search_array 获取位置,但我想在同一个查询中进行查询。

例如:

SELECT * FROM tbl_messages WHERE _user = '2' AND _instance = '5' ORDER BY _date ASC LIMIT 10, OFFSET (Here I would like to return the position in the result, and start the result list from post_id = 'R5G96H5D85S9' by example).

我在几个小时的搜索中找不到任何满足我兴趣的东西,我很感激任何给我一个想法的尝试;

谢谢

mysql pdo
2个回答
0
投票

你不能做你在一个查询中描述的事情,因为

LIMIT
OFFSET
的参数不能是表达式或子查询。

所以你必须在运行查询之前计算位置。你说你已经知道怎么做了。

您可以使用整数参数或变量作为

LIMIT
的参数。

SELECT * FROM tbl_messages 
WHERE _user = '2' AND _instance = '5' 
ORDER BY _date ASC LIMIT 10 OFFSET ?

(注意我删除了 OFFSET 之前的逗号)


0
投票

好吧,对不起那些说不可能同时放弃的人。 对于那些来到这个问题寻找答案的人,我是这样得到的:

SELECT @a = row_num - 1 FROM (SELECT row_number() over (ORDER BY `_date` DESC) row_num, `_message_id` AS "m_id" FROM `tbl_messages` WHERE `_contact` = '2' AND `_instance` = '5' ORDER BY `_date` DESC) AS tab WHERE tab.`m_id` = 'BAE58BEA44DD7972';
PREPARE PREP FROM "SELECT * FROM `tbl_messages` WHERE `_contact` = '2' AND `_instance` = '5' ORDER BY `_date` DESC LIMIT 10 OFFSET ?";
EXECUTE PREP USING @a;
© www.soinside.com 2019 - 2024. All rights reserved.