我有三个表,一个表有主题,一个表用于用户数据,一个表用于存储用户订阅。
用户可以/不可以订阅其可选项,因此为了获得具有订阅状态的所有用户列表,我使用左连接作为
SET @rnum = 0;
SELECT (@rnum :=@rnum + 1) AS rn, user.user_name, subs.status
FROM user_tbl LEFT JOIN subs_tbl ON user.uid = subs.uid LIMIT 0, 10;
我一次使用整个输出,但现在随着数据的增长,我已经在我的应用程序中实现了此输出的分页。
对于分页,我创建了一个row_num机制,我将存储显示的最后一个row_num,并在下一页上显示last_num。
现在我想要用订阅的第一个或最后一个对用户进行排序,所以我使用了
SELECT (@rnum :=@rnum + 1) AS rn, user.user_name, subs.status
FROM user_tbl LEFT JOIN subs_tbl ON user.uid = subs.uid ORDER BY subs.status LIMIT 0, 10;
给出行号而不是我想要的,它首先给出行号然后进行排序,所以我没有按照需要得到结果。
所以我需要帮助,
[这是根据我的实际问题创建的示例,在我的实际问题中,我有一个包含多个连接和子查询的巨大查询,因此嵌套此查询并对其进行编号是不可能的]
答案 0 :(得分:2)
也许你正在寻找这样的东西:
(已删除,因为不符合OP的要求,如评论所提醒。)
或者,您也可以尝试LIMIT
的参数化。从MySQL 5.0.7开始,LIMIT
is parametrisable在作为存储过程或预准备语句的一部分的语句中使用时:{/ p>
PREPARE stmt FROM
'SELECT
...
LIMIT ?, ?';
EXECUTE stmt USING @offset, @limit;
值得注意的是,对于这种方法,尽可能采用明确的排序顺序是最有意义的。