为什么使用 JSON_ARRAYAGG 进行 SELECT 时会忽略 LIMIT?

Ely*_*din 7 mysql stored-procedures mysql-workbench

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);
Run Code Online (Sandbox Code Playgroud)

我需要上述查询以 json_arrayagg 格式仅显示 5 个数据,但它返回整个数据而不将其限制为 5 个。我的查询有什么问题?

ϻᴇᴛ*_*ᴛᴀʟ 2

您需要先对limit结果使用子查询aggregating

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);
Run Code Online (Sandbox Code Playgroud)