MySQL - 根据其他表从一个表中选择

时间:2013-01-03 03:53:45

标签: mysql

我在数据库中有10个用户。每个用户都可以发布他想要的链接。每个用户都可以看到其他用户发布的所有链接。

如果一个用户点击链接,例如google.com,他将不会再次看到它,但是那些没有点击该链接的用户仍可以点击该链接。

为此我有2个表(可能它们构建得很糟糕,除了它们与外键无关)。

linksPosted

id   |   link   |   user
1        g.com      john
2        h.com      patrick
...

clicksMade

id   |   link   |   user
1        g.com      jack
2        h.com      nick
...

因此,所有发布的链接都可以被其中的所有用户看到。每次发布链接时,都会将其添加到linksPosted表中。好。然后,例如,如果杰克点击g.com,杰克将能够看到其他用户的其他链接,但g.com不会再次出现给他,因为他点击了它,但尼克将能够点击g。因为他没有点击它。

如何在SQL查询中执行此操作?

感谢。

2 个答案:

答案 0 :(得分:1)

要获取jack可见的链接,请使用以下查询

  select * from linksposted linktbl where linktbl.link not in(select 
    clickstbl.link from clicksmade clickstbl where clickstbl.user='jack')

或者您可以使用

   select linktbl.id,linktbl.link,linktbl.`user` from linksposted linktbl 
   left join clicksmade clickstbl on linktbl.link=clickstbl.link and
   clickstbl.user='jack' where clickstbl.link is null

答案 1 :(得分:0)

我认为你可以通过添加" NOT IN"来解决这个问题。选择...... "例如select * from linksPosted where id NOT IN(SELECT id FROM click from user = $ myuser)" 请注意,这是一个非常快速和肮脏的解决方案...更好的是外连接。 我认为它是这样的 select * from linksposted l right outer join clicksmade c on c.id = l.id. 但你必须对此进行一些研究......但它是正确的方向