我是新手,所以不知道这个情况是多表的复合查询还是嵌套:表document 中有d_id、receiver、doc_type等字段,表sign_record 包含s_id、d_id、u_id、sign_status等字段,其中两表中的d_id对应,而receiver字段中的值是一串由逗号分隔的d_id。我已经知道可以用以下语句得出表document中receiver里包含有某个u_id的记录:
SELECT * FROM `document` WHERE `doc_type`='$_GET[t_id]' AND FIND_IN_SET('$u_id',`receiver`)问1:现在我要查询出在表document中满足条件:表sign_record中sign_status=1且表document中receiver包含有某个u_id且doc_type='文件' 的记录。问2:那么如何查询出表document里的另一些记录呢?即表sign_record中sign_status不为1(或者说还没有写入的那些记录)。希望有高手能看懂我的问题。
SELECT * FROM `document` WHERE `doc_type`='$_GET[t_id]' AND FIND_IN_SET('$u_id',`receiver`)问1:现在我要查询出在表document中满足条件:表sign_record中sign_status=1且表document中receiver包含有某个u_id且doc_type='文件' 的记录。问2:那么如何查询出表document里的另一些记录呢?即表sign_record中sign_status不为1(或者说还没有写入的那些记录)。希望有高手能看懂我的问题。
贴建表及插入记录的SQL,及要求结果出来看看问1:现在我要查询出在表document中满足条件:表sign_record中sign_status=1且表document中receiver包含有某个u_id且doc_type='文件' 的记录。
select * from `document` where sign_status=1 and doc_type='文件' and
FIND_IN_SET(某个u_id,`receiver`)问2:那么如何查询出表document里的另一些记录呢?即表sign_record中sign_status不为1(或者说还没有写入的那些记录)。
select * from `document` where sign_status<>1
问2我没看明白,你要的是什么结果。“另一些记录”到底什么记录?
问题一:
SELECT * FROM `document` WHERE `doc_type`='$_GET[t_id]' AND FIND_IN_SET('$u_id',`receiver`) ":"SELECT * FROM `document` WHERE FIND_IN_SET($u_id,`receiver`) AND `d_id` IN (SELECT `d_id` FROM `sign_record` WHERE `u_id`='$u_id' AND `sign_status`=1 )
问题二:
SELECT * FROM `document` WHERE `doc_type`='$_GET[t_id]' AND FIND_IN_SET('$u_id',`receiver`) ":"SELECT * FROM `document` WHERE FIND_IN_SET($u_id,`receiver`) AND `d_id` NOT IN (SELECT `d_id` FROM `sign_record` WHERE `u_id`='$u_id' AND `sign_status`=1 )这样的写法已经可以实现我要的功能,但不知道是不是存在什么性能问题。虽然前面几位朋友给的方案我没有能调试出来,但还是要感谢大家的热心帮助。