确定多对多关系中的内容

时间:2013-10-28 22:47:20

标签: mysql list many-to-many database-relations definitions

这可能是一个简单的答案,但过去几天我一直在研究这个问题,而且它开始让我感到沮丧

我有一个包含多对多关系的数据库


-------------     ---------------------     ------------------- 
|Images     |     |user2img           |     |User             | 
-------------     ---------------------     ------------------- 
|imgID      |     |id                 |     |UserID           |
|imgURL     |     |imgID              |     |UserName         |
|imgAv      |     |UserID             |     |UserEmail        |
-------------     ---------------------     ------------------- 

user2img表指示允许用户查看的图像。

我正在尝试确定一个SQL查询,它将列出每个图像(一次不重复)并告诉我指定的用户是否有权查看该图像。

输出如,

(WHERE UserID ='1')

----------------------------
|imgID   | imgURL | access |
----------------------------
|1       | xxx    |  Yes   |
|2       | yyy    |  No    |
|3       | qqq    |  Yes   |
|4       | rrr    |  Yes   |
|5       | www    |  No    |
|6       | sss    |  Yes   |
 etc...
----------------------------

谢谢,

1 个答案:

答案 0 :(得分:0)

一种可能性是(我承认不是最好而且效率不高)为具有内部联接的用户选择所有匹配的图像而不是复合密钥表,而 UNION 结果是否定的选择(iid在我的测试表中是imageId):

select 
    iid, url, 'yes'
    from user_has_image
    inner join image on user_has_image.iid = image.id
    inner join user on user_has_image.uid = user.id
    where user.id = 1
union
select 
    iid, url, 'no'
    from user_has_image
    inner join image on user_has_image.iid = image.id
    inner join user on user_has_image.uid = user.id
    where user.id <> 1

您可以在此SQLFiddle session中看到结果。