mysql - 为什么使用 JSON_ARRAYAGG 进行 SELECT 时忽略 LIMIT?
问题描述
set countt = PAGE_ * 5 - 5;
set @data = (select JSON_ARRAYAGG(JSON_OBJECT('id', room_participants.id, 'isAdmin', room_participants.isAdmin, 'userId', room_participants.userId, 'joinTime', room_participants.joinTime, 'leftTime', room_participants.leftTime, 'status', room_participants.status, 'kickTime', room_participants.kickTime, 'displayName', users.displayName, 'phone', users.phone, 'created', created))
from room_participants
LEFT JOIN users ON room_participants.userId = users.id
WHERE room_participants.roomId = ROOMID_ LIMIT 5 OFFSET countt);
我需要上述查询以 json_arrayagg 格式仅显示限制为 5 个数据,但它会将整个数据返回给我,但不限制为 5。我的查询有什么问题?
解决方案
我不知道您的代码不起作用的确切原因,但一种解决方法是应用于LIMIT
子查询,然后基于此形成 JSON:
SET countt = PAGE_ * 5 - 5;
SET @data = (
SELECT JSON_ARRAYAGG(JSON_OBJECT('id', id, 'isAdmin', isAdmin, 'userId', userId, 'joinTime', joinTime, 'leftTime', leftTime, 'status', status, 'kickTime', kickTime, 'displayName', displayName, 'phone', phone, 'created', created))
FROM
(
SELECT rp.id, rp.isAdmin, rp.userId, rp.joinTime, rp.leftTime, rp.status,
rp.kickTime, u.displayName, u.phone, created
FROM room_participants rp
LEFT JOIN users u ON rp.userId = u.id
WHERE rp.roomId = ROOMID_
LIMIT 5 OFFSET countt
) t
);
请注意,使用LIMIT
withoutORDER BY
通常不是一个定义明确的事情。理想情况下,您还应该在子查询中添加一个ORDER BY
子句。
推荐阅读
- winforms - Infragistics UltraToolbarsManager - 将 ApplicationDefaults 添加到 QuickAccessToolbar
- javascript - JavaScript:undefined++的结果是NaN,不是undefined?
- excel - 宏太慢
- ruby-on-rails - Rails,在设计登录存储位置重定向中保留锚标记
- php - 用 php 包含内容
- git - Github 无法从基础分支发出拉取请求
- java - 如何使用 json 对象从上下文处于 mainactivity 的对话框的 editText 发送数据?
- c# - 在实体框架事务中执行存储过程
- javascript - 向 Cytoscape 动态添加节点
- processing - 非常新手故障排除。Atom 上的基本 p5.js index.html 设置,不在浏览器上生成任何内容?