我在数据库中有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查询中执行此操作?
感谢。
答案 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. 但你必须对此进行一些研究......但它是正确的方向