0

私は2つのテーブルを持っています:

リンク

 | id | ...
   1
   2
  ...

クリック数

 | linkid | userid | click_date |
    1     |   2    | ...
    4     |   2    | ...
    5     |   3    | ...

ユーザーがリンクからリンクをクリックすると、クリックに追加されます。

ユーザーがクリックしていないリンクのみを返すために MySQL クエリを使用したい - ペア linkid:userid がテーブルに含まれていないか、click_date (Unix エポックからの秒数) が GMT で昨日だった。

4

4 に答える 4

1
SELECT DISTINCT links_clicks.linkid FROM
(SELECT links.id AS linkid 
 FROM links 
 LEFT JOIN clicks ON links.id = clicks.linkid
 WHERE links.id IS NULL OR clicks.click_date <= CURDATE())
 AS links_clicks;
于 2012-05-26T20:15:03.613 に答える
0

sql selectは、指定された#useridを持つユーザーがクリックしていないすべてのリンクを選択します。

select * from links where id not in( select linkid from clicks where userid = #userid)

ユーザーが昨日クリックしたすべてのクリックを選択します

select * from links a inner join clicks b on(a.id = b.linkid) where date(click_date) = date(DATE_ADD(CURDATE(), INTERVAL -1 DAY)) and userid = #userid

一緒に欲しいなら

select * from links where id not in( select linkid from clicks where userid = #userid) or 
id in(select linkid from clicks where date(click_date) = date(DATE_ADD(CURDATE(), INTERVAL -1 DAY)) and userid = #userid)
于 2012-05-26T20:28:20.660 に答える
0

JOIN 操作を使用します。WHERE ステートメントの条件についてはわかりません。変更する必要があるかもしれません。

SELECT id FROM links
JOIN
SELECT linkid FROM clicks WHERE (userid IS null)

PHP Mysql モジュールで SQL クエリを実行します。

例えば

mysql_connect("localhost", "mysql_user", "mysql_password") or
    die("Could not connect: " . mysql_error());
mysql_select_db("mydb");
$query = "THE SQL STATEMENT FROM ABOVE";
$result = mysql_query($query);
于 2012-05-26T20:17:36.123 に答える
0

これは簡単なクエリです。

select * from link
where id not in (
    select linkid 
    from clicks
    where userid = $userid
    and click_date >= current_date)

この内部クエリは、ユーザーが今日クリックしたすべてのリンクを検索します。not in (...)構文は、これらのリンクを取得できないことを意味します

このクエリは、質問が求めるものを正確に提供します。

于 2012-05-26T20:19:51.463 に答える