通过Mysql数据库点击计数器

时间:2014-06-27 11:47:01

标签: php mysql sql

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相同

所以,

  1. 如何加入表格,这是第一个问题。
  2. 与1相关:如何计算每个链接的点击次数?
  3. 如何计算一段时间内链接的点击次数?

2 个答案:

答案 0 :(得分:2)

首先,在TIMESTAMP表格中使用DATETIMElinks_clicks列,而不是分隔DATEINT列来保存日期和小时。

其次,请阅读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

这些让你开始,你可以缩小日期范围等结果。