php - mysql大神来看看
PHPz
PHPz 2017-04-11 10:17:27
[PHP讨论组]

如图 b_leibie 字段存储 的是菜单id 比如 有的存了 4,0,2 三个菜单Id 有的只存一个Id 现在

比如我要查 菜单id为0 在表中的数据 sql怎么写尼 如果图中的表名是 busi 表

原生的或者thinkPHp的写法都可以 谢谢

PHPz
PHPz

学习是最好的投资!

全部回复(8)
大家讲道理

方法一、

可以用 正则 REGEXP 来匹配,具体sql如下:
SELECT * FROM `table_name` WHERE `b_leibie` REGEXP '([0-9],)?([0-9],)?0(,[0-9])?(,[0-9])?';
然后根据字段 `b_leibie` 存储的 id 个数来确定正则表达式即可。

方法二、

更加建议用一楼的那个函数 FIND_IN_SET
SELECT * FROM `table_name` WHERE FIND_IN_SET('0',`b_leibie`);
希望能帮到你!

另:TP也可以跑原生SQL的。

ringa_lee

find_in_set

PHP中文网
根据mysql手册中find_in_set函数的语法: FIND_IN_SET(str,strlist) 

select * from article where FIND_IN_SET('0',b_leibie) 
大家讲道理
FIND_IN_SET:
WHERE FIND_IN_SET('0', `b_leibie`);

或者

FullText Search:
WHERE MATCH(`b_leibie`) AGAINST('+0' IN BOOLEAN MODE);
要求字段上创建了 FULLTEXT KEY 索引.
要求配置 innodb_ft_min_token_size=1 关键词索引的最小长度为1.
大家讲道理

谢邀!

可以like匹配

迷茫
SELECT * FROM busi WHERE b_leibie LIKE '0,%' OR b_leibie LIKE '%,0,%' OR b_leibie LIKE '%,0' OR b_leibie = '0';

这样查没法走索引,建议还是再建一张表来关联菜单ID和文章ID吧。

怪我咯
SELECT * FROM table WHERE FIND_IN_SET('0',b_leibie)
PHP中文网

如果不能单独存到一张表里的话 建议 把4 存成 ‘,4,’.然后查询的时候
D()->where(['b_leibie'=>['like'=>',4,']])->select();

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

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