我在做一个记录表,记录表里的记录用user字段来说明其归属用户,那么一个用户找到自己的记录就很简单:
(例如我的用户id是19)
select * from log where user=19;同时,我想让某个记录,用户可以设置共享给其他用户,这就很头疼了,在设计上我最后想出的办法,就是再建立一个share表,
然后把记录的共享的关系记录在share表。log记录表
id user share 剩下的字段略
--------------------
1 2 0 ...
2 19 0 ...
3 3 7 ...
4 3 0 ...
5 19 0 ...
6 2 0 ...
(user字段建立索引)
share表
shareID user
-------------------------
7 2
7 19
...
...
(shareID+user字段建立索引)
现在我不知道如何构造这一条sql句子,理想中应该是
select * from log where user=19 && (share!=0&&(select * from share where shareID=share&&user=19));就是列出user=19,同时 share不等于0同时share表有共享记录存在的。另外,有没有更好更具有效率的方式来实现我所说的功能?
解决方案 »
- mysql binary string转换成bigint
- 把前四个字段用CONCAT函数连接,把连接后的字段昨晚第五个字段,怎么写SQL语句
- 问下删除11W的数据怎么要 30 秒
- 数据库连接问题
- Mysql创建数据库的问题,求助???
- 关于MySQL4.1系列版本采用的密码加密方法跟PHP自带客户端不一样
- postgresql中大量插入数据出现错误,请教....
- 一个关于分组的小问题
- mysql多个子查询左联后提示找不到别名表
- 使用MySQL可以开发电影视频网站吗?
- 一个用于先select出id,再根据id进行update的语句,出错了
- 求一条sql语句,在一个字段中插入自增的数,自增数有间隔
select * from log a where a.user=19 and a.share>0 and exists (select 1 from share b where b.user=a.user);其实,对你的需求也是很模糊的:
某个记录可以共享给其它用户,你是针对log表的id列来说呢还是针对user列来说的呢?如果是user列的话,假如是user=2的话,那是否会出现user=2但只有id=1的对应记录的share>0而id=6的 对应记录的share=0的情况呢?
还有,就是你说的某条记录可以共享给其它用户,是不是一条记录只可以共享个一个用户呢?还是可以共享给多个用户呢?所以,你得说清楚你的需求吧
id user share
--------------------
1 2 0
2 19 0
3 3 1
4 3 0
5 19 0
6 2 0
聚集索引 id
索引 usershare表
id logid user
-------------------------
1 3 2
2 3 19 聚集索引 user, logid
索引 logid
SELECT * FROM log WHERE user = 100000
UNION
SELECT log.* FROM share, log
WHERE share.logid = log.id
AND log.share = 1
AND share.user = 100000log.share 表示这条记录是否允许分享。