Mysql 数据字段值是用逗号隔开,如何写SQL语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 数据字段值是用逗号隔开,如何写SQL语句相关的知识,希望对你有一定的参考价值。
例如 :
数据1 字段AID 值 ,24,35,45,
数据2 字段AID 值 ,35,20,
传送过来查询的值是 35,19
查询的结果应该是两条数据都查出来了。。 因为查询中有35 数据1和2中都有这个值
求大神赐教
例如:$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语句的主要内容,如果未能解决你的问题,请参考以下文章