使用COUNT,GROUP BY和ORDER BY MAX过滤日志文件

时间:2011-04-08 19:20:27

标签: php mysql logging count group-by

您好我有一台记录客人和用户导航的机器,我正在尝试编写一个PHP脚本,它会对日志进行排序,并总结一下人们往往会去的前五个目的地,即最

到目前为止,这就是我所拥有的:

<?php

#### mysql connection #####
$db = mysql_connect("_","guest","_");
mysql_select_db(networkr) or die("Couldn't select the database");
echo "<table>";
$query = "SELECT uri LIMIT 5, COUNT(date) GROUP BY uri ORDER BY MAX(COUNT(date)), uri DESC";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
    echo "Top 5 Destinations:". $row['COUNT(date)'] ." ". $row['uri'] .".";
    echo "<br />";
}
echo "</table>";
?>

因此,我试图通过使用日期作为唯一标识符来访问特定页面(uri)的所有时间。然后我希望它按从高到低的降序列出计数。然后只显示前五个访问量最大的页面。

我在网络浏览器中打开php脚本时遇到的错误是:

  

您的SQL语法有错误;   检查对应的手册   您的MySQL服务器版本   在'COUNT(日期)附近使用正确的语法   GROUP BY uri ORDER BY   MAX(COUNT(日期)),uri DESC'在第1行

我认为它有某种语法错误,因为我不是php的专家。如果有人可以帮助我浏览脚本以获得最受欢迎的错误。

3 个答案:

答案 0 :(得分:0)

在其余查询之后,LIMIT应该出现,并且您没有使用FROM子句指定从哪里获取记录,如下所示:

SELECT uri, COUNT(date) 
FROM <tablename>
GROUP BY uri 
ORDER BY MAX(COUNT(date)), uri DESC 
LIMIT 5

答案 1 :(得分:0)

  1. 你错过了一个FROM条款。
  2. 在ORDER BY之后移动LIMIT

    SELECT uri,COUNT(date)FROM YourTable GROUP BY uri ORDER BY MAX(COUNT(date)),uri DESC LIMIT 5

答案 2 :(得分:0)

您不必使用MAX()。只需使用下面的查询。

SELECT uri, COUNT(date) AS visits
FROM table
GROUP BY uri
ORDER BY visits DESC
LIMIT 5

echo喜欢这样:

while($row = mysql_fetch_assoc($result)){
    echo "Top 5 Destinations:". $row['visits'] ." ". $row['uri'];
    echo "<br />";
}