查询条件的问题

数据库里有一列clipboard.png

还有一个数组array(5,8,9)
我想查询条件是 数组和列除去逗号,有相同的数,就查出来,
比如有一个数组(5,8) ,数据就全部查出来

  一个数组(6,9) ,就查最后一个
  一个数组(1,2),查不出来
阅读 3.1k
4 个回答

我觉得题主想找的是mysql中的FIND_IN_SET,可以这样写

select * from table_name where find_in_set('5',type_id) or find_in_set('8',type_id) or find_in_set('9',type_id) ;

但是这样的语句会产生全表扫描,也就是说,表数据量大了,你的语句就会很慢,具体有多慢呢,举个例子,当你的表有100万条数据时,这条语句执行将会需要几秒钟那么久。而如果你只使用id in (xx,xxx)这样的语句,在几十条数据到几百万条数据,执行速度不会有明显差异(±10ms)

如果实在是这种结构查询,提供三种查询形式,以下是查询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[[:>:]]'

select * from table where type_id in (5,8,9);
table为你要查的表,(5,8,9)就是你要匹配的数组

like可以,但是最好存储成“,6,8,”,这样可以直接like“,6,”,否则“66,8”也会被检索出来。
另外一个是你的数据库scheme设计有些问题,如果你想弄成类似数组这样的你可以试试mongodb。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题