模糊查询

昨天朋友问我一个关于模糊查询的问题.
简化下,其大意是这样的,现有如图一个数据表test

cid假定为categories表的id,他们是用逗号,隔开的.
现在要查询出cid还有2的name.
这里需要说明下,cid里还有categories表的id为2,而像id为32,22是不合要求的,也就是说并不是所有带2的cid都可以.

起初我写的SQL是这样的:
select name from test where cid like ‘%2%’ /*错误示范*/
这也是我刚才要特别解释的原因,32,22并不是他想要得到的结果.
故这个SQL不行了.

后来写成这样 where cid like ‘%,2,%’
呵呵,这个也是个错误示范.
这个得不到以2开头和结尾的.

后来我也有些蒙了,
到群里问了下,
大家的力量是伟大的.

惊鸿告诉我这样做:
select name from test where concat(‘,’,cid,’,’) like ‘%,2,%’
这个是可以的,很强大,使用了一个mysql的字符串函数concat.

后来回网站,把题目告诉了,网站的人.
后生可畏啊!
修瑞也写出一个用or的SQL.
select name from test where cid like ‘%,2,%’ or cid like ‘2,%’ or cid like ‘%,2’

现在看看,这个问题并不是太难嘛,呵呵,可能是知道答案了吧!
贴出来给右心房漩涡看哈,同是也感谢惊鸿修瑞,也为修瑞高兴,孩子不错,好好学,有钱途啊!

其实后来惊鸿还给出一个方法,
select name from test where 2 in concat(‘(‘,cid,’)’)
不过这个方法测试不通过,起初说是要转义(),不过转义了还是不行.
我在网上搜例子的时候,也没找出什么原因,就放弃这个方法了,不过还是不知道是什么原因,要是有知道的朋友,希望不吝赐教!

相关文章

发表评论

返回顶部