0

我有两张桌子:

链接

 | 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

使用 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 回答
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 回答