2

我有一个查询问题

SELECT usuarios.UsuarioId, usuarios.UsuarioNombre, 
usuarios.UsuarioFechaRegistro, usuarios.UsuarioFecha, 
usuarios.UsuarioCompartir, usuarios.UsuarioPrivacidad, 
usuarios.UsuarioAvatar, usuarios.PlataformaDefecto, 
GROUP_CONCAT( DISTINCT usuarios_plataformas.PlataformaId) as Plataformas, 
CONCAT('[', GROUP_CONCAT( 
DISTINCT CASE WHEN follows.UsuariosSiguiendo = usuarios.UsuarioId 
THEN (SELECT CONCAT('{"UsuarioNombre":"', usuarios.UsuarioNombre, '", "UsuarioId":"', usuarios.UsuarioId, '"}') 
FROM usuarios 
WHERE UsuarioId = follows.UsuariosSeguido) END), ']') as Siguiendo, 
CONCAT('[', GROUP_CONCAT( 
DISTINCT CASE WHEN follows.UsuariosSeguido = usuarios.UsuarioId 
THEN (SELECT CONCAT('{"UsuarioNombre":"', usuarios.UsuarioNombre, '", "UsuarioId":"', usuarios.UsuarioId, '"}') 
FROM usuarios 
WHERE UsuarioId = follows.UsuariosSiguiendo) END), ']') as Seguido 
FROM (`usuarios`) 
LEFT JOIN `usuarios_plataformas` ON `usuarios_plataformas`.`UsuarioId` = `usuarios`.`UsuarioId` 
LEFT JOIN `follows` ON `follows`.`UsuariosSiguiendo` = `usuarios`.`UsuarioId` 
OR follows.UsuariosSeguido = usuarios.UsuarioId 
WHERE `UsuarioNombre` = '50l3r' 
GROUP BY `usuarios`.`UsuarioId`

查询返回我这个结果: http: //gyazo.com/92687af3657239bd7c069ed165c5253c

在我的查询中,我将结果格式化为 json。但在“Siguiendo”、“Seguido”列中,结果拆分为限制字符。

非常感谢您的帮助

4

1 回答 1

2

那是因为您使用的是GROUP_CONCAT()并且它对由它形成的字符串长度有限制。这是group_concat_max_len - 所以你应该调整它以适应你的任务。- 但请注意,它在任何情况下都无法克服 max unsigned longint (适用429496729532-bit系统和系统)1844674407370954752064-bit

您可以通过动态更改限制

SET [GLOBAL | SESSION] group_concat_max_len = val;

但是,还有另一个更常见的max_allowed_pa​​cket限制。它限制了一个数据包或任何生成/中间字符串的最大大小,因此它也应该适合您的问题。

于 2013-11-02T15:50:02.880 回答