mysql逗号分隔字段查询并按记录顺序显示输出

4 篇文章 0 订阅

标签表:

idtag_idtag_name
11bt1
22bt2
33bt3

记录表:

idtag_ids
11,3,2
23,1,2

SQL语句:

SELECT SQL_CALC_FOUND_ROWS r.*,
GROUP_CONCAT(t.tag_name ORDER BY FIND_IN_SET(t.tag_id , r.tag_ids)) AS tag_names
FROM records r 
LEFT JOIN tag t ON FIND_IN_SET(t.tag_id , r.tag_ids)
GROUP BY r.id 
ORDER BY r.id 
LIMIT 0,1

结果:


小结:

GROUP_CONCAT(expr)函数:将多个字符串连接成一个字符串,中间用逗号隔开;

FIND_IN_SET(str,strlist)函数:一个字段中含有多个值用逗号隔开,在关联表时,可以拆分逗号逐一去和被关联表的字段比较(str:要查询的字符串,如上方标签表的tag_id字段;strlist:以逗号,分隔的字符串列表,如上方记录表的tag_ids字段)

重点:想要按记录顺序显示输出,在GROUP_CONCAT函数里加上order by FIND_IN_SET函数,不然会按该字段表的id升序输出导致数据错乱

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2Hhhhhh

一分也是爱 多多益善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值