我是新手,所以不知道这个情况是多表的复合查询还是嵌套:表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(或者说还没有写入的那些记录)。希望有高手能看懂我的问题。

解决方案 »

  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.   

    问1,这是我的理解select distinct(a.d_id),a.receiver,a.doc_type from document as a,sign_record as b where a.d_id=b.d_id and sign_status=1 and FIND_IN_SET(1,a.receiver) and doc_type='文件'
    问2我没看明白,你要的是什么结果。“另一些记录”到底什么记录?
      

  3.   

    问题已经解决了,可能是我没有叙述清楚,最终我是这样写的:
    问题一:
    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 )这样的写法已经可以实现我要的功能,但不知道是不是存在什么性能问题。虽然前面几位朋友给的方案我没有能调试出来,但还是要感谢大家的热心帮助。