有一张相片表,一张相片所属标签表,一张相片可以归属于多个标签,表结构如下:
现在需要通过一次查询,得到每一张照片对应的标签名称,标签名称之间以固定的分隔符连接,结果如下图:
二、查询语句
原生 Mysql 语句
SELECT
think_img.id,
think_img.NAME,
think_img.label_id,
GROUP_CONCAT( think_img_label.NAME SEPARATOR " - " ) AS labelName,
think_img.update_time,
think_img.create_time
FROM
`think_img`
LEFT JOIN `think_img_label` ON FIND_IN_SET( think_img_label.id, think_img.label_id )
GROUP BY
`think_img`.`id`
ORDER BY
`think_img`.`sort`
LIMIT 0,10;
如果要左链接出多条,按照字表中个数关联,则去掉group by即可,例:
SELECT
think_img.id,
think_img.NAME,
think_img.label_id,
GROUP_CONCAT( think_img_label.NAME SEPARATOR " - " ) AS labelName,
think_img.update_time,
think_img.create_time
FROM
`think_img`
LEFT JOIN `think_img_label` ON FIND_IN_SET( think_img_label.id, think_img.label_id )
ORDER BY
`think_img`.`sort`
LIMIT 0,10;
另一种类似情况:
Mysql数据库中从表字段中存储了主表以逗号隔开的主键ID,现需求查询从表数据以及以逗号隔开的字段改为主表名称隔开(group_count() find_in_set())
例如:
两张表,
一张为爱好表b表
一张为用户表 u表
u表
id 名称 爱好Id
1 张三 1,2,3,4
2 李四 2,5
b表
id 名称
1 打乒乓
2 打羽毛球
3 打蓝球
4 上网玩游戏
5 打牌
正常查询u表
select * from u
现在需求是:
id 名称 爱好
1 张三 打乒乓,打羽毛球,打篮球,上网
2 李四 打羽毛球,打牌
修改sql为
select u.id,u.名称,group_count(b.名称) from u left join b on find_in_set(b.id,u.爱好Id) group by u.id;