一个很流氓的sql设计!!!!

Mr_K 发布于 2016/05/31 18:53
阅读 2K+
收藏 2
SQL

是这样的:有一张表,如图:

M_ID 是一个字符串

现在我想要的结果是,比如知道一个M_ID为1,我需要查询包含M_ID为1的所有列,这个怎么实现?

完全没有思路···

M_ID是一个字符串,里面的每个数字之间是用英文的逗号分割的。


加载中
4
ramnight
ramnight
find_in_set(1, M_ID)
Mr_K
Mr_K
这个是?
2
chaoshu
chaoshu
M_Id这样存:,1,2,3,4, 然后查询:like '%,1,%'
e
earthdog
WHERE (',' + M_ID + ',') LIKE '%,1,%'
chaoshu
chaoshu
1的时候存的就是,1,
Mr_K
Mr_K
如果M_ID只有1呢,不行啊
1
shijacky
shijacky
用程序实现啊,非得在sql直接查才叫实现?
shijacky
shijacky
回复 @Mr_K : 程序中把 M_ID拆开,然后各列去 in 查询
Mr_K
Mr_K
程序实现的话,需要全部查询出来,然后每一条每一条的循环对比~是不是很浪费资源!!!!
1
eechen
eechen
http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_find-in-set
FIND_IN_SET(str,strlist):
比如 SELECT FIND_IN_SET('b','a,b,c,d') 将返回2.
FIND_IN_SET(str,strlist)将返回第一个找到str的位置,返回值大于0,表示字段strlist中存在str.
比如我要查出字段tags中包含php的文章,其中tags字段的内容格式为用逗号分隔的a,b,c,d:
SELECT * FROM `posts` WHERE FIND_IN_SET('php', `tags`);
楼主的要求应该是:
SELECT * FROM `table` WHERE FIND_IN_SET('1', `M_ID`);
Mr_K
Mr_K
不是mysql哦···
1
温安适
温安适
下边是Mysql的正则表达式写法,满足你的要求
select * from table(你的表)
WHERE M_ID REGEXP '^(1|1,.*|.*,1,.*|.*,1)$'



0
MockMan
MockMan
'1,%', '1','%,1,%','%,1',基本上就这几种情况了吧
ramnight
ramnight
回复 @Mr_K : 你没看见那个'1'啊?
maradona
maradona
回复 @Mr_K : 里面不是有1吗
Mr_K
Mr_K
如果只有一个1呢···
0
Coffee_M
Coffee_M
模糊查询就可以啊
Coffee_M
Coffee_M
楼上的说的就可以,用逗号隔开,插入的时候字符串最后以逗号结尾
Mr_K
Mr_K
这样不精确··你想想
0
tywali
tywali
MySQL支持正则表达式,可以用正则表达式模糊查询,具体语法我现在记不得了,你可以查下。
0
魔力猫
魔力猫
先重构数据结构
0
护士的小黄瓜
护士的小黄瓜
楼上的都没听懂楼主的意思,楼主的意思是让我们一起批判吐槽这个表的设计人员
返回顶部
顶部