Mysql 数据字段值是用逗号隔开,如何写SQL语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 数据字段值是用逗号隔开,如何写SQL语句相关的知识,希望对你有一定的参考价值。

例如 :
数据1 字段AID 值 ,24,35,45,

数据2 字段AID 值 ,35,20,
传送过来查询的值是 35,19
查询的结果应该是两条数据都查出来了。。 因为查询中有35 数据1和2中都有这个值
求大神赐教

1、将传递过来的值进行分割 用,分割成数组
例如:$var=explode(",",$str);
2、循环数组
3、在循环内查询sql
查询时候 有两种方法 按照sql语法或者php语法
sql 用 find_in_set(str1,str2);
php 用 strpos(str1,str2,start);
具体语法格式自己搜索一下吧。
参考技术A http://blog.csdn.net/huang_sheng0527/article/details/77836359 参考技术B 例如………

数据库Mysql获取以逗号隔开字符串的第一个元素

场景需求

有时会通过group_concat 获取一个分组查询后的字段以逗号隔开的字符串,而且还要按照时间排序取第一个
通俗的讲就是 获取时间最新的另一个字段的值

分组查询可以这么写:

group_concat(create_person order by create_time desc) as create_persons

以下查询sql中全部用 create_persons ,省略group_concat部分

具体实现

那么要取第一个有两种方法实现:

1、通过方法 SUBSTRING_INDEX

SUBSTRING_INDEX(create_persons,',', 1)  

简单解释:
a、SUBSTRING_INDEX: 取一段字符串按照 特殊字符 分组后的 第几个字符串
b、第一个是从1开始的

2、通过方法 left 和 LOCATE

LEFT(create_persons, LOCATE(',',create_persons)-1)  

简单解释:
a、LEFT(str, length):mysql左截取
b、LOCATE(substr,str):返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0

总结

第一种方案 更加的简约易懂
第二种略显繁杂,而且还有一个问题,如果字符串没有逗号,将无法获取到值,所以还得优化为一下sql

left(create_persons, if(LOCATE(',',create_persons)=0,length(create_persons),LOCATE(',',create_persons)-1))  

是不是更复杂了,所以个人建议第一种

如果有更好的方案,欢迎留言讨论哟

以上是关于Mysql 数据字段值是用逗号隔开,如何写SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

mysql 字段内容是用逗号分隔的。怎么按序列查询内容

mysql查询某数字在某字段以逗号隔开的字符里面

sql 如何以逗号为分隔符分割一个字段的值

sql字段里有逗号隔开的数据,怎么取值

MySQL 如何将Id相同的字段合并,并且以逗号隔开

MYSQL列中的数据以逗号隔开,如何查询?