0

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

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

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

链接已发布

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

点击次数

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

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

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

谢谢。

4

2 回答 2

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
于 2013-01-03T05:02:44.793 回答
0

我认为您可以通过在选择中添加“NOT IN”来解决这个问题...“例如,从 id NOT IN 的 linksPosted 中选择 *(SELECT id FROM clicks made where user = $myuser)”请注意,这真的很快和肮脏的解决方案......更好的解决方案是外部连接。我认为这类似于 select * from linksposted l right outer join clicksmade c on c.id = l.id 但你必须对此进行一些研究......但这将是正确的方向

于 2013-01-03T04:00:29.187 回答