MySQL JOIN 连接时,条件为以逗号分隔的字段与 ID 相匹配 FIND_IN_SET


一、背景

有一张相片表,一张相片所属标签表,一张相片可以归属于多个标签,表结构如下:

现在需要通过一次查询,得到每一张照片对应的标签名称,标签名称之间以固定的分隔符连接,结果如下图:

二、查询语句

原生 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;

TP5 查询语句

Db::table('think_img')->field('think_img.*,GROUP_CONCAT( think_img_label.name separator " - " ) as labelName')
->join('think_img_label', 'FIND_IN_SET( think_img_label.id,think_img.label_id )', 'left')
->group('think_img.id')
->order('think_img.sort')
->select();

三、关键函数用法

FIND_IN_SET(str,strList)

  • str 要查询的字符串
  • strList 字段名,参数以“,”分隔,如(1,2,6,8)
  • 查询字段(strList)中包含的结果,返回结果null或记录。

GROUP_CONCAT([DISTINCT] expr,[ORDER BY ASC/DESC col_name],[SEPARATOR str_val])

  • [DISTINCT] expr 要连接的字段
  • [ORDER BY col_name] 排序字段
  • [SEPARATOR str_val] 分隔符

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM