LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1491|回复: 13

一个Mysql数据库查询的问题

[复制链接]
发表于 2005-11-8 23:01:32 | 显示全部楼层 |阅读模式
表的结构大致是:
-----------------------------------
事件 时间 参加人员
1 051028 王明,张三,李四,王五
2 051109 张三,王五,李四
3 050923 王明,张三,王五

现在要查询某一个特定的人员“王明”所参加的在某一时间范围内的所有活动,返回事件的序号,请问操作如何实现?多谢
发表于 2005-11-9 00:00:37 | 显示全部楼层
你这个表没有提供足够的信息,“参加人员”是什么类型的字段?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-9 20:38:50 | 显示全部楼层
参加人员字段是text类型的,字数没有限制
回复 支持 反对

使用道具 举报

发表于 2005-11-9 21:10:16 | 显示全部楼层
假定查询050904到051103之间:
select * from `表名` where `时间`>'050903' and `时间`<'051104' and `参加人员` like '%王明%';
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-10 20:11:48 | 显示全部楼层
like '%王明%'中这个%是什么意思,如果有人叫“王明天”或者“张王明”,这个检索能排除掉吗?
另外like字段好像对中文字符搜索不好啊,经常搜不出来是什么原因呢?多谢
回复 支持 反对

使用道具 举报

发表于 2005-11-10 20:52:38 | 显示全部楼层
1.%是通配符,在添加"参加人员"记录时在头尾各加一个“,”,这样可以检索',王明,'
2.字段属性改为varchar(x) binary试试
回复 支持 反对

使用道具 举报

发表于 2005-11-10 20:54:56 | 显示全部楼层
刚才说法有误,应该检索'%,王明,%'
回复 支持 反对

使用道具 举报

发表于 2005-11-10 23:05:30 | 显示全部楼层
改了一下

假定查询050904到051103之间:
select * from `表名` where `时间`>'050903' and `时间`<'051104' and `参加人员` regexp '\(,\)\?王明\(,\)\?';
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-11 23:56:37 | 显示全部楼层
多谢各位,我加了%后已经能检索出来了,不过“王明天”或者“张王明”的问题还不好作,楼上说的加“,”不太容易做,因为我这里记录是不同的人员添加的,从效率上说不好约束。另外` regexp '\(,\)\?王明\(,\)\?'这些是什么意思呢?没有看懂
回复 支持 反对

使用道具 举报

发表于 2005-11-12 09:08:12 | 显示全部楼层
那就这样
select * from `表名` where `参加人员` like '王明,%' or `参加人员` like '%,王明,%' or `参加人员` like '%,王明' having `时间`>'050903' and `时间`<'051104';
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表