mysql大神来看看

图片描述

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

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

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

阅读 4k
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的。

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();

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