首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用JSON_ARRAYAGG选择时会忽略这些限制?

为什么使用JSON_ARRAYAGG选择时会忽略这些限制?
EN

Stack Overflow用户
提问于 2019-11-13 10:05:41
回答 2查看 670关注 0票数 1
代码语言:javascript
复制
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。我的查询有什么问题?

EN

回答 2

Stack Overflow用户

发布于 2019-11-13 10:12:42

我不知道你的代码不能工作的确切原因,但一个变通办法是对子查询应用LIMIT,然后基于它形成JSON:

代码语言:javascript
复制
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
);

请注意,在没有ORDER BY的情况下使用LIMIT通常不是一个定义良好的东西。理想情况下,您还应该向子查询添加一个ORDER BY子句。

票数 1
EN

Stack Overflow用户

发布于 2019-11-13 10:12:10

你需要在aggregating之前使用子查询来limit你的结果。

代码语言:javascript
复制
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', t.dCreated)
            )
            from 
            (select t1.*, t2.*, t1.created as dCreated from room_participants t1 
                left join users t2 on t1.userId = t2.id 
                where t1.roomId = ROOMID_ limit 5 offset countt) t);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58829302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档