Table: links
id link_ref name clicks unique_clicks url
1 external_link EXTERNAL LINK 2 1 .index.php
Table:links_clicks
id link_id ip date hour
1 2 an_ip a_date a_hour
这些是表格,下面是我尝试过的代码:
$querym = mysql_query("SELECT * FROM `links` RIGHT JOIN `links_clicks` ON `links`.`id`=`links_clicks`.`link_id`");
while ($row = mysql_fetch_assoc($querym))
{
Echo $row['link_ref']."<br>";
}
我想要的是显示一个输出,其中包含来自&#34;链接&#34;的所有链接。表格以及过去24小时内每次点击的次数。
在表格&#34; links_clicks&#34;存储所有点击和&#34;链接&#34;存储有关每个外部链接的信息。
links.id与许多link_clicks.link_id相同
所以,
答案 0 :(得分:2)
首先,在TIMESTAMP
表格中使用DATETIME
或links_clicks
列,而不是分隔DATE
和INT
列来保存日期和小时。
其次,请阅读JOIN操作。我不清楚为什么你要使用正确的外连接。内连接可以正常工作。
第三,专业提示:不要在软件中使用SELECT *
。它通常会返回太多信息。
第四,您需要一些聚合查询功能(GROUP BY
)。
尝试此查询,以获取最近24小时内点击的链接列表及其点击次数,按首先点击次数排序。
SELECT COUNT(*) AS num,
links.url
FROM links
JOIN links_clicks ON links.id = links_clicks.link_id
WHERE links_clicks.click_timestamp >= NOW() - INTERVAL 1 DAY
GROUP BY links.url
ORDER BY COUNT(*) DESC
如果您不需要纯行计数,则可以使用COUNT(*)
之外的内容进行聚合查询。例如,您可以尝试
COUNT(distinct links_clicks.ip)
如果您只想计算一次不同的ip
值。
答案 1 :(得分:0)
SELECT count(*) AS total_click FROM links_clicks WHERE link_id = ?;
应该让你开始,为每个链接做到这一点。
或者你可能会更复杂并且
SELECT count(DISTINCT c.link_id) FROM link_clicks c LEFT JOIN links l ON (c.link_id=l.link_id) GROUP BY l.link_ref
这些让你开始,你可以缩小日期范围等结果。