一、背景

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

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

二、查询语句

原生 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] 分隔符

最新文章

  1. JS&CSS文件请求合并及压缩处理研究(五)
  2. JDK7学习笔记之基础类型
  3. 新手学JavaScript都要学什么?
  4. 黑盒测试与白盒测试(Black box Testing)
  5. Lucas的数论(math)
  6. 【风马一族_Android】Android学习
  7. 黑马程序员—C语言的特点和关键字
  8. ssh别名登录密钥登录
  9. python 3.7 配置mysql数据库
  10. JAVA并发包学习
  11. sqlserver全文检索
  12. web应用与web框架
  13. vue 自动识别PC、移动端,并跳转到对应页面
  14. android 代码混淆示例
  15. 2: Eclipse反编译工具Jad及插件JadClipse配置
  16. 【leeetcode】125-Valid Palindrome
  17. LeetCode——4. Median of Two Sorted Arrays
  18. python 大量使用json 存储数据时,格式化输出的方式
  19. 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作
  20. HDU 4436 str2int (后缀自动机SAM,多串建立)

热门文章

  1. 使用CAS实现单点登录功能
  2. Java内存模型与Volatile,Happen-Before原则等
  3. 自己搭建gitlab服务,组员不能上传代码
  4. 常见的 35 个 Python 面试题及答案
  5. Gan-based zero-shot learning 论文整理
  6. windows下用navicat远程链接虚拟机Linux下MySQL数据库(转)
  7. Kafka生产者性能优化之吞吐量VS延迟
  8. Axure中继器设置单选
  9. 【C/C++开发】C++编译指令#pragma pack的配对使用
  10. sql 查找所有员工信息(俩表连接查询)