2011-10-22 181 views
0

我有2个表格:文件和用户。mysql条件查询

files 
---------------------------- 
|Fileid | name | type | 
---------------------------- 
| 01  | file1 | private | 
| 02  | file2 | private | 
| 03  | file3 | Public | 
---------------------------- 

user 
--------------------- 
| Fileid | UserId | 
--------------------- 
| 01  | user1 | 
| 02  | user1 | 
--------------------- 

我怎么会选择所有的纪录;谁ID是在“用户”表中,只有“公共”文件中的任何其它用户(私人和公共),其中'userid'不在'user'表中?请帮助

+0

这个问题奇怪地被格式化和混淆描述。 – MarianP

回答

2

如果我理解正确的问题,您正在寻找一个有利于LEFT JOIN返回files各个领域的非空UserId,或Public只有当UserId IS NULL

SELECT 
    files.* 
FROM files LEFT JOIN user ON files.Fileid = user.Fileid 
WHERE 
    user.UserId IS NOT NULL 
    OR (user.UserId IS NULL AND files.type = 'Public') 
+0

我认为这是我正在寻找的解决方案,让我试试看。谢谢@Michael –

+0

该查询会做的伎俩,除了你有一个错字在你的括号中; user.User.Id应该是user.UserId – Marcus

+0

@Marcus刚刚修复,因为你评论。 –

0

从我所了解的你需要2个循环的第一部分。一个循环将从表中获取用户标识。第二个循环应放在第一个循环内。第二个将使用循环中的ID来获取所有文件。

第二部分可以通过使用sql查询循环来完成,如SELECT * FROM files WHERE userID != $userID[$i],$ userID应该是一个包含所有用户ID的数组。

注意:我假定您忘记在文件表中包含一个外键来将两个表连接在一起。

+0

Ahoura Ghotbi,感谢您的回复...有没有一种方法可以在查询中完成它? –

+0

是的,如果我没有错,你可以使用SQL中的联合功能,并获得所有的ID,然后将它们与您的其他表进行比较,看看它们是否在那里。 –