0

DBに10人のユーザーがいます。各ユーザーは、必要な数のリンクを投稿できます。各ユーザーは、他のユーザーが投稿したすべてのリンクを見ることができます。

1 人のユーザーがリンク (例: 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

ジャックに表示されるリンクを取得するには、次のクエリを使用します

  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」を追加することでこれを解決できると思います...「eg select * from linksPosted where id NOT IN (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 に答える