社区
基础编程
帖子详情
想请教一个问题 求高手指点
zmzkkk
2011-05-12 03:35:51
大家在设计数据库时,如果在一个字段里记录的内容有可能有多个值,大家会不会用','或者‘|’ 等,分割内容, 在读取数据库的时候再根据 ','或者'|' 等分割内容。 还是另起一个表。 感觉如果另起一个表,数据结构复杂了, 可是不另起表,读数据的时候复杂, 甚至怕以后需要统计数据的时候更复杂,不知道怎么取舍。 求高手指点
...全文
90
6
打赏
收藏
想请教一个问题 求高手指点
大家在设计数据库时,如果在一个字段里记录的内容有可能有多个值,大家会不会用','或者‘|’ 等,分割内容, 在读取数据库的时候再根据 ','或者'|' 等分割内容。 还是另起一个表。 感觉如果另起一个表,数据结构复杂了, 可是不另起表,读数据的时候复杂, 甚至怕以后需要统计数据的时候更复杂,不知道怎么取舍。 求高手指点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
feng_lqwe
2011-05-17
打赏
举报
回复
LZ 根据你自己的那种方法就很好
an9ryfr09
2011-05-17
打赏
举报
回复
同意楼上,FIND_IN_SET效率和LIKE差不多。
至于使用哪种结构,要看你的存储的那些值是否经常改变。
其实有一种办法我经常用,但条件是你那些需要记录的值的数量,不要超过32个或64个(视你的cpu位数而定)
假如我要存储的值有:
a,b,c,d,e
如果按照常规方法存3个值,你大概会类似这样存:a,c,e或a|c|e
我可以建立一个list:
$list = array(
'a' => 1,
'b' => 2,
'c' => 4,
'd' => 8,
'e' => 16
);
当我需要存储a,c,e3个值时,我只需存储1+4+16的和21,只需要存储1个21,就可以知道,这个值中包括了a,c,e这三个值。如何知道?
foreach( $list as $v ){
if( (int)(21 & $v) == $v){
$items[] = $v;
}
}
var_dump($items);
其实这个类似于linux的权限管理,采用按位与操作。
不过这个你可以看一下这个序列,那个每次以^2递增,所以会变得很大,一旦超过你cpu的所能计算的最大二进制位,就会溢出了。
所以对于你这个需求,其实还有种方法可以用。前面按你说的,用|或,把所有值存储在一起,但是检索的时候,使用全文检索,不要使用LIKE或FIND_IN_SET。如果你里面存储的值没有中文的话,只需要在my.cnf里面增加一个
ft_min_word_len = ?的选项就可以了,?根据你所要检索的词最大长度而定。
但如果需要存储中文的话,就比较麻烦了,你需要再加一个字段,以区位码的形式来存储这些值,然后全文检索区位码那一列。
wasuka
2011-05-13
打赏
举报
回复
如果查询频繁,最好新建一个表1对多存储。虽然可以用FIND_IN_SET(),但是效率不高;
如果只用来记录,不用来SQL查询,无所谓。
zmzkkk
2011-05-13
打赏
举报
回复
如今我现在情况是, 有几种服务,服务1,服务2,服务3,服务4,还有一个其他. 用户填表时通过 check 多选框选择,本来我是自己定义一个数组, array('服务1','服务2','服务3','服务4') 入数据库的时候就保存数组的下标, 可是现在问题是,要求如果用户点击‘其他’ 的时候,用户可以输入文字,这段文字该如何保存,新建一个表?? 还是把原来保存服务这个字段,改为varchar型 . 即使是前面几个服务1,2,3,4也直接保存字符串,可是这样做又感觉不太好,将来如果不要把服务1 的名字改来其他,就麻烦了。
xuzuning
2011-05-12
打赏
举报
回复
[Quote=引用楼主 zmzkkk 的回复:]
大家在设计数据库时,如果在一个字段里记录的内容有可能有多个值,大家会不会用','或者‘|’ 等,分割内容, 在读取数据库的时候再根据 ','或者'|' 等分割内容。 还是另起一个表。 感觉如果另起一个表,数据结构复杂了, 可是不另起表,读数据的时候复杂, 甚至怕以后需要统计数据的时候更复杂,不知道怎么取舍。 求高手指点
[/Quote]为什么不呢? MySQL 不是已提供了 find_in_set 函数吗?
diannaomingong
2011-05-12
打赏
举报
回复
一般另外做一个表,俗称key-value式
多一个表就算复杂的话那以后还怎么继续!
content=”IE=7, IE=9″意思理解
公司的项目在老总的IE9下无法正常访问了。 哎,苦逼啊。本以为搞定了IE6,7,8,firefox,chrome,safari,opera,就行了。...欢迎各位朋友拍砖,
求
指点
,
求
进步。 转自http://www.jqueryba.com/77.html
excel例题分析
excel例题分析,函数公式的用法,不太清楚,
请教
高人
指点
,谢谢
游戏画面就弹出内存不能为read修复工具
如果去
请教
一些「
高手
」,得到的回答往往是「Windows就是这样不稳定」之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的一般原因。 一、应用程序没有检查内存分配失败 ...
请教
别人与
指点
别人
先从
一个
小故事讲起吧。 某人问神父, 为啥每次讲教义时, 都先从
一个
故事讲起, 为啥不直接讲教义的内容。 神父说:一枚果子, 你是
想
自己吃呢, 还是我嚼过了再喂你吃? 以前上大学时, 宿舍里的哥们除我之外, ...
请教
淘宝API sign签名
问题
,望高人
指点
!谢谢!
请教
淘宝API sign签名
问题
基础编程
21,886
社区成员
140,364
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章