一、背景

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

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

二、查询语句

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

MySQL JOIN 连接时,条件为以逗号分隔的字段与 ID 相匹配的更多相关文章

  1. SQL join 连接时 条件加在 on后面和 where 的区别

    task 是用户任务表,manageuser是用户表,以left join 为参考: 此时主表是task,三条sql语句:注意区别.第一句无筛选条件,第二句筛选条件在on后面,第三句sql的筛选语句放 ...

  2. MySQL左连接时 返回的记录条数 比 左边表 数量多

    在学MySQL的连接时,为了便于记忆,就将左连接 记做 最后结果的总记录数 和 进行左连接的左表的记录数相同,简单的说就是下面这个公式 count(table A left join table B) ...

  3. MySQL 8 连接时出现 1251 和 2059 错误

    MySQL 8 连接时出现 1251 和 2059 错误 原因是MySQL 8 改了密码加密算法.1 原来是:mysql_native_password MySQL8 改成了 caching_sha2 ...

  4. MySQL 的连接时长控制--interactive_timeout和wait_timeout

    在用MySQL客户端对数据库进行操作时,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR 2013 (HY000): Lost connection to MySQL server d ...

  5. 关于left join连接查询 两张表里有同名字段的问题

    左连接查询在开发中很常用,但有个问题常常会遇到,两个表中有同名字段时,比如左右表都有一个id字段,会造成查询结果中左表的id值被右表的id值覆盖掉(大部分php框架都是这个效果),而且还不会报错,容易 ...

  6. mysql jdbc连接时的小问题java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

    这次重新修改老程序时出现了上面的错误,排查过后最终找到问题所在:root帐户默认不开放远程访问权限,所以需要修改一下相关权限. 打开MySQL目录下的my.ini文件(win10默认安装在C:\Pro ...

  7. MySql 远程连接的条件

    1.首先看服务器防火墙 引用:http://www.cnblogs.com/silent2012/archive/2015/07/28/4682770.html CentOS 7.0默认使用的是fir ...

  8. centos下MySQL Workbench连接时崩溃的解决方法

    在centos6.5中使用MySQL Workbench 6.3.8链接数据库崩溃,如果是在终端使用命令“mysql-workbench”打开的话会有如下错误提示: /usr/libexec/mysq ...

  9. Python MySQL Join

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

随机推荐

  1. m4a 转MP3

    import os for filename in os.listdir(r'.'): print filename os.rename(filename,filename.replace(' ',' ...

  2. grandle Project sync failed.please fix your project and try again

    Android Studio导入项目或者新建项目想运行的时候可能会报错Gradle project sync failed. Please fix your project and try again ...

  3. service和Dao层有什么关系

    Dao层:主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类 ...

  4. openstack重设虚拟机实例密码

    目录结构: 引出 采用 nova get-password 方式 采用 libvirt-set-admin-password 采用 nova rebuild instance 的方式 采用 cloud ...

  5. Software Engineering Continuous Integration Eclipse Mylyn

  6. Mysql 插入自增的最大版本号

    有一个需求,在历史表中,一条数据,在最大版本号上进行自增 INSERT Biz_CourseStudyHistory ( contentStudyID, courseWareID, versionNO ...

  7. Python - Django - form 组件常用的字段和字段参数

    邮箱: views.py: from django import forms from django.forms import widgets class RegForm(forms.Form): e ...

  8. 【视频开发】GPU编解码:GPU硬解码---DXVA

    GPU编解码:GPU硬解码---DXVA 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解码可分四级:VLD,控制BitStream;IDCT,反 ...

  9. Nginx反向代理+负载均衡简单实现(手动申请https证书,申请免费https证书,http强转https)

    背景:A服务器(192.168.1.8)作为nginx代理服务器B服务器(192.168.1.150)作为后端真实服务器 现在需要访问https://testwww.huanqiu.com请求时从A服 ...

  10. [C语言] 关于计算多边形面积的一点问题

    [一道练习题] 面基 时间限制:1000ms   内存限制:65536kb 通过率:107/134 (79.85%)    正确率:107/319 (33.54%) 题目描述 按顺时针或逆时针顺序输入 ...