php - 查询条件的问题
ringa_lee
ringa_lee 2017-04-11 09:45:55
[PHP讨论组]

数据库里有一列

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

  一个数组(6,9) ,就查最后一个
  一个数组(1,2),查不出来
ringa_lee
ringa_lee

ringa_lee

全部回复(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[[:>:]]'
PHP中文网

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

PHP中文网

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号