扫码关注官方订阅号
如图 b_leibie 字段存储 的是菜单id 比如 有的存了 4,0,2 三个菜单Id 有的只存一个Id 现在
比如我要查 菜单id为0 在表中的数据 sql怎么写尼 如果图中的表名是 busi 表
原生的或者thinkPHp的写法都可以 谢谢
学习是最好的投资!
方法一、
可以用 正则 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的。
find_in_set
根据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)
如果不能单独存到一张表里的话 建议 把4 存成 ‘,4,’.然后查询的时候 D()->where(['b_leibie'=>['like'=>',4,']])->select();
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
方法一、
方法二、
另:TP也可以跑原生SQL的。
find_in_set谢邀!
可以like匹配
这样查没法走索引,建议还是再建一张表来关联菜单ID和文章ID吧。
如果不能单独存到一张表里的话 建议 把4 存成 ‘,4,’.然后查询的时候
D()->where(['b_leibie'=>['like'=>',4,']])->select();