赞
踩
标签表:
id | tag_id | tag_name |
1 | 1 | bt1 |
2 | 2 | bt2 |
3 | 3 | bt3 |
记录表:
id | tag_ids |
1 | 1,3,2 |
2 | 3,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升序输出导致数据错乱
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。