gpt4 book ai didi

mysql - 左外连接?行编号问题

转载 作者:可可西里 更新时间:2023-11-01 08:34:16 25 4
gpt4 key购买 nike

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

一个用户可能订阅/不订阅它的可选,所以为了获得所有用户列表及其订阅状态,我使用 left join as

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 的任何替代品(我也想要空值,因为我想要所有用户信息)。
  3. 有没有其他方法给SQL结果编号。
  4. 在这种情况下,是否有关于函数的任何 PHP 或任何可以帮助我的东西。

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

最佳答案

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

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

或者,您也可以尝试对 LIMIT 进行参数化。从 MySQL 5.0.7 开始,LIMIT is parametrisable当在作为存储过程或准备好的语句的一部分的语句中使用时:

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

EXECUTE stmt USING @offset, @limit;

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

关于mysql - 左外连接?行编号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17961617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com