mysql 查数据,以json形式(一条中包含多个子数据)

com_post_response回复表/回复帖子/回复回复

也就是说所有回复都存在com_post_response表

现在,我查一条回复,想要看到他的子回复怎么做(如图)

 

表结构图:消息表

idint 
post_idint帖子ID
user_idint用户ID
conment_timedatetime评论时间
verify_stateint审核状态 0待审核 1发布 2隐藏
conment_contentvarchar评论内容
conment_typeint1回复帖子  2回复用户
conment_user_idint回复用户ID
is_complainint是否被举报  1是0否
validint有效值
create_datedatetime建立日期
response_comment_idint回复评论ID  如果回复帖子 则为0
modify_datedatetime修改日期

 

SELECT r1.id,u1.nickname,u1.id uid,u1.avatar,r1.conment_content,r1.conment_time,r1.post_id
,CONCAT('[',substring_index(group_concat(JSON_OBJECT('nickname',u2.nickname,'uid',u2.id,'avatar',u2.avatar,'conment_content',
r2.conment_content,'conment_time',r2.conment_time,'h_uid',u3.id,'h_avatar',u3.avatar,'h_nickname',u3.nickname)),',',16),']') sp,COUNT(r2.id) huifushuliang
 FROM com_post_response r1
LEFT JOIN com_post_response r2 on r2.response_comment_id=r1.id and r2.verify_state!=2 and r2.conment_type=2
LEFT JOIN xyb_user u1 on r1.user_id=u1.id
LEFT JOIN xyb_user u2 on r2.user_id=u2.id
LEFT JOIN xyb_user u3 on r2.conment_user_id=u3.id
where r1.verify_state!=2 and r1.conment_type=1 #and r1.post_id=bl_post_id//帖子id
GROUP BY r1.id;

 

这一句为主要:我解析一下 最里层是建立json格式的字符串 {},{}格式

substring_index :显示数量 (16是里面有8给值我显示两条所以为16)

'nickname'    : 别名

CONCAT:拼接成json的字符串

COUNT(r2.id) :回复数量

CONCAT('[',substring_index(group_concat(JSON_OBJECT('nickname',u2.nickname,'uid',u2.id,'avatar',u2.avatar,'conment_content',
r2.conment_content,'conment_time',r2.conment_time,'h_uid',u3.id,'h_avatar',u3.avatar,'h_nickname',u3.nickname)),',',16),']') sp,COUNT(r2.id) huifushuliang

 

当然这只是做外面的展示,当字符串过长时会省略超出255的文本

当点击详细时可以再从后台获取多的值

最后查出来的值

 

sp的值:

 

如果你觉得这篇内容对你挺有启发请点赞+关注

3、也欢迎关注我的博客哦

posted @ 2022-07-16 13:52  深山藏古客  阅读(282)  评论(0编辑  收藏  举报