社区
基础编程
帖子详情
想请教一个问题 求高手指点
zmzkkk
2011-05-12 03:35:51
大家在设计数据库时,如果在一个字段里记录的内容有可能有多个值,大家会不会用','或者‘|’ 等,分割内容, 在读取数据库的时候再根据 ','或者'|' 等分割内容。 还是另起一个表。 感觉如果另起一个表,数据结构复杂了, 可是不另起表,读数据的时候复杂, 甚至怕以后需要统计数据的时候更复杂,不知道怎么取舍。 求高手指点
...全文
151
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式
多一个表就算复杂的话那以后还怎么继续!
用命令调试蓝牙遇到的
问题
,
求
高手
指点
最近调试开发板的蓝牙模块,使用NOKIA手机可以与开发板进行通信,而所有的android手机均不能配对,下面是调试的log,恳
求
高手
指点
。下面以中兴U880手机为例: shell@android:/ # hciconfig -a hci0: Type: BR/EDR Bus: USB BD Address: E0:B2:F1:7D:E4:D3 ACL MTU: 820
超微ipmi遇到
问题
,
求
高手
指点
超微x9dri-f主板,以前可以正常使用java控制台控制ipmi。现在出现故障,故障如下:web连接到ipmi,下载jnlp后运行,java会报错。各版本的java报错内容不一样。java7报错 :无法加载资源:https://ip:端口/libwin_x86_64_v1.0.5.jar java8会报错:未签名的应用程序请
求
系统无限制访问。
求
大神
指点
,万分感谢
菜鸟
求
高手
指点
#includeusing namespace std;void Swap(int &a,int &b){ int c; c=a; a=b; b=c;}void ShuChuShuZu(int a[],int size){ for(int i=0;i cout}void KuaiSu(int a[],int size){ int t=0,f=size-1; for(int i
求
高手
指点
下面是两个方法:
//把汉字转换为16进制字符串
public string GetHex(string s)
{
if ((s.Length % 2) != 0)
s += "";
System.Text.Encoding chs = System.Text.Encoding.GetEncoding("gb2312");
求
助,npm install安装出错,
求
高手
指点
问题
所在
npm安装错误
基础编程
21,889
社区成员
140,333
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章