MySQL tag设计中,where in参数为带逗号的字符串查询

tags字段是逗号隔开tag id。


查询一

select 
 i.id,
 i.title,
 i.tags,
 (select 
   GROUP_CONCAT(tb_tag.title SEPARATOR ',') 
   from tb_tag where id in (i.tags)
 ) as tags_title
from tb_item as i;

结果:


查询二

select 
 i.id,
 i.title,
 i.tags,
 (select 
    GROUP_CONCAT(tb_tag.title SEPARATOR ',') 
    from tb_tag where FIND_IN_SET(id,i.tags)
  ) as tags_title
from tb_item as i;


结果


解释

在MySQL中 where in条件如果是字符串,会自动转化成int类型,内部使用了 CAST('6,8,3,2' AS INT),导致’6,8,3,2‘ 变成了6,所以查询一中 tags_title只有一个。解决方法是使用查询二中的 FIND_IN_SET。

修改时间 2021-01-14

真诚赞赏,手留余香
赞赏
随机推荐
为什么Axios ajax每次patch都会有两次网络请求?
MySQL 自定义函数获取一个分类的无限级子分类
Vuex中的信息,刷新页面后,数据没有了的解决方案
php判断是手机还是电脑访问
php判断数组中是否存在指定键(key)的两种方法
JS 判断字符串是否为手机号
macOS 安装 nginx
MySQL 数据库如何存储时间?Datetime 和 Timestamp 之间的抉择
为什么日本动漫中会出现大眼睛,多发色,多瞳色
CentOS 8 Apache 使用 ModSecurity 防止 DDOS
QQ号

微信联系我

夜间模式切换
回到顶部