数据库里有一列
还有一个数组array(5,8,9)
我想查询条件是 数组和列除去逗号,有相同的数,就查出来,
比如有一个数组(5,8) ,数据就全部查出来
一个数组(6,9) ,就查最后一个
一个数组(1,2),查不出来
如果实在是这种结构查询,提供三种查询形式,以下是查询array(6,9)
的SQL
形式
FIND_IN_SET
SELECT * FROM table WHERE FIND_IN_SET(6,type_id) or FIND_IN_SET(9,type_id);
LIKE
SELECT * FROM table WHERE CONCAT(',' , type_id , ',') LIKE '%,6,%' OR CONCAT(',' , type_id , ',') LIKE '%,9,%';
REGEXP
SELECT * FROM table WHERE type_id REGEXP '[[:<:]]6[[:>:]]|[[:<:]]9[[:>:]]'
like可以,但是最好存储成“,6,8,”,这样可以直接like“,6,”,否则“66,8”也会被检索出来。
另外一个是你的数据库scheme设计有些问题,如果你想弄成类似数组这样的你可以试试mongodb。
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
我觉得题主想找的是mysql中的FIND_IN_SET,可以这样写
但是这样的语句会产生全表扫描,也就是说,表数据量大了,你的语句就会很慢,具体有多慢呢,举个例子,当你的表有100万条数据时,这条语句执行将会需要几秒钟那么久。而如果你只使用id in (xx,xxx)这样的语句,在几十条数据到几百万条数据,执行速度不会有明显差异(±10ms)