数据库某列多数据复杂查询问题?

小丁丁1999 发布于 2013/05/08 18:48
阅读 330
收藏 0

某列存放(1,2,3,4,5,6,7,8,9,10,11,12)这样的数据,如何精确查询(1,2),(1,12),(5,6,7)等组合数据?

对了,不要使用CONTAINS。期待高手解决。

加载中
0
mark35
mark35
这样的数据库设计下是不可能的
0
宏哥
宏哥

引用来自“mark35”的答案

这样的数据库设计下是不可能的

我考虑过这种情况

最后还是用 关系表来解决问题. 不用单独字段

其实表 的实质就是不可分割数据. 

如果可以分割, 就是关系.

0
mark35
mark35

引用来自“宏哥”的答案

引用来自“mark35”的答案

这样的数据库设计下是不可能的

我考虑过这种情况

最后还是用 关系表来解决问题. 不用单独字段

其实表 的实质就是不可分割数据. 

如果可以分割, 就是关系.

‘组合’就是一种关系,为求简便把具有关系的数据丢一个字段中,然后又想在其中找出某种关系结果,这是没事找抽

所以discuz一直没实现主题的多重分类:因为要实现就必须把分类这个字段展开成一个关联表,但是mysql无法对集合进行高效操作。即便做出来倒是可以加速系统崩溃机会


小丁丁1999
小丁丁1999
受教了。
魔力猫
魔力猫
没错。
0
小丁丁1999
小丁丁1999
不是吧,真不可能实现?那我真是没事找抽啦。
0
红星xx
红星xx
可以通过 php的 explode 分割成数组 , 通过键名 访问 值  进行 in 查询, 但是 不知道 你这是 干什么的 。详细情况 没法帮了
0
赵亮-碧海情天
赵亮-碧海情天

这是开发中很常见也很容易解决的问题了。

提问的例子不够好,过于简单,用 1,2,1,3,11,22,111,33,34 比较能够说明问题。如果是这种情况,会出现当查询1,2或1,3时误把11,22和111,33也当成查获情形,导致错误。

解决这个问题的思路,首先要保证提取比较的数字必须是完整的,而这一点就要依靠分隔符来完成了。所以在存储数据时,必须每个数字的前后都有分隔符,如 (,1,2,1,3,11,22,111,33,34, ),而且在查询时也要带上分隔符,比如查询",1,2,"或",11,22,",这样就精确了。

至于实现(1,2),(1,12),(5,6,7)等组合数据条件的查询,可以在数据库中写一个存储过程,或者在程序里写一个函数来进行SQL语句的组装。不同的组合之间是OR或AND(根据你的需求)关系,组合内的关系就是把组合元素拆开的几个AND条件。

mark35
mark35
与其这样折腾还不如使用pgsql的数组字段,可以直接在字段上查询[1,2],[1,12]等组合并且还可以走索引
q
qiangweikang
回复 @qiangweikang : ttt
q
qiangweikang
回复 @赵亮-碧海情天 : 666666
q
qiangweikang
回复 @王玮玮 : 666666
小丁丁1999
小丁丁1999
估计得很复杂呀。还是独立一个表出来解决算了。
下一页
0
mark35
mark35

引用来自“赵亮-本人”的答案

这是开发中很常见也很容易解决的问题了。

提问的例子不够好,过于简单,用 1,2,1,3,11,22,111,33,34 比较能够说明问题。如果是这种情况,会出现当查询1,2或1,3时误把11,22和111,33也当成查获情形,导致错误。

解决这个问题的思路,首先要保证提取比较的数字必须是完整的,而这一点就要依靠分隔符来完成了。所以在存储数据时,必须每个数字的前后都有分隔符,如 (,1,2,1,3,11,22,111,33,34, ),而且在查询时也要带上分隔符,比如查询",1,2,"或",11,22,",这样就精确了。

至于实现(1,2),(1,12),(5,6,7)等组合数据条件的查询,可以在数据库中写一个存储过程,或者在程序里写一个函数来进行SQL语句的组装。不同的组合之间是OR或AND(根据你的需求)关系,组合内的关系就是把组合元素拆开的几个AND条件。

本来很简单一个问题,搁在mysql这破烂上面就越整越复杂……
0
q
qiangweikang

引用来自“mark35”的评论

引用来自“宏哥”的答案

引用来自“mark35”的答案

这样的数据库设计下是不可能的

我考虑过这种情况

最后还是用 关系表来解决问题. 不用单独字段

其实表 的实质就是不可分割数据. 

如果可以分割, 就是关系.

‘组合’就是一种关系,为求简便把具有关系的数据丢一个字段中,然后又想在其中找出某种关系结果,这是没事找抽

所以discuz一直没实现主题的多重分类:因为要实现就必须把分类这个字段展开成一个关联表,但是mysql无法对集合进行高效操作。即便做出来倒是可以加速系统崩溃机会


66666666
返回顶部
顶部