繁体   English   中英

左外连接? 行编号问题

[英]Left outer join? Row numbering issue

我有三个表,一个表有主题,一个表用于用户数据,一个表用于存储用户订阅。

用户可以/不可以订阅其可选项,因此为了获得具有订阅状态的所有用户列表,我使用左连接作为

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;

这是给行号而不是我想要的,它首先给行号然后进行排序,所以我没有得到所需的结果。

所以我需要帮助,

  1. 有更好的分页方式吗?
  2. 是否存在Left Join的替代(我也想要null值,因为我想要所有用户信息)。
  3. 是否有任何其他编号SQL结果的方法。
  4. 在这种情况下,是否有关于功能的PHP或任何可以帮助我的东西。

[这是根据我的实际问题创建的示例,在我的实际问题中,我有一个包含多个连接和子查询的巨大查询,因此嵌套此查询并对其进行编号是不可能的]

也许你正在寻找这样的东西:

(删除不符合OP的要求,如评论提醒。)

或者,您也可以尝试LIMIT参数化。 从MySQL 5.0.7开始, LIMIT在作为存储过程或预准备语句的一部分的语句中使用时是可参数化的

PREPARE stmt FROM
'SELECT
...
LIMIT ?, ?';

EXECUTE stmt USING @offset, @limit;

值得注意的是,对于这种方法,最有意义的是具有尽可能明确的排序顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM