Фильтрация файла журнала с использованием COUNT, GROUP BY, ORDER BY MAX - PullRequest
1 голос
/ 08 апреля 2011

Привет, у меня есть машина, которая регистрирует, куда заходят гости и пользователи, и я пытаюсь написать php-скрипт, который будет сортировать журналы и суммировать для меня пять лучших мест назначения, на которые люди обычно обращаются, т.е. какие страницы посещаются.most.

Пока это то, что у меня есть:

<?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 (date)), uri DESC' в строке 1

Я думаю, что это какая-то синтаксическая ошибка, так как я не эксперт в php.Если кто-нибудь может помочь мне выполнить скрипт для ошибок, которые будут наиболее цениться.

Ответы [ 3 ]

0 голосов
/ 08 апреля 2011
  1. Вам не хватает предложения FROM.
  2. Переместите ЛИМИТ после ЗАКАЗА НА

    ВЫБЕРИТЕ uri, COUNT (дата) ИЗ ГРУППЫ YourTable ПО ЗАКАЗУMAX (COUNT (дата)), URI DESC LIMIT 5

0 голосов
/ 08 апреля 2011

Вам не нужно использовать 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 />";
}
0 голосов
/ 08 апреля 2011

LIMIT должен появиться после остальной части вашего запроса, и вы не указываете, где получить записи с помощью предложения FROM, например:

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