Protossan
@Protossan
студент

Как выбрать со сравнением по времени в ограниченном диапазоне?

Помогите советом. Есть таблица постов на сайте, и надо найти 10 участников, которые оставили больше всех сообщений за 60 минут с сохранением id этих постов.
Т.е. кто-то может постить по 100 сообщений в день, через каждых 15-20 минут, а кто-то постит только 50 но на протяжении 60 минут. Вот мне надо из всех кто есть в таблице найти 10 тех, кто оставил наиболее много постов за час,

Таблица "posts" имеет поля
usrid | data | post | postid

Правда здается что одним запросом тут не отделаешься никак. Или все же реально?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если за конкретный интервал времени, то
SELECT `t1`.`usrid`, `t2`.`data`, `t2`.`postid`
    FROM (
        SELECT `usrid`, COUNT(*) AS `cnt`
            FROM `posts` 
            WHERE `data` BETWEEN :start AND :end 
            GROUP BY `usrid`
            ORDER BY `cnt` DESC
            LIMIT 10
    ) AS `t1`
    JOIN `posts` AS `t2` USING(`usrid`)
    WHERE `t2`.`data` BETWEEN :start AND :end
    ORDER BY `t1`.`cnt`, `t1`.`usrid`, `t2`.`data`

Вариант с плавающим окном в комментарии
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
iam_not_a_robot
@iam_not_a_robot
Смотря в каком виде там время, если datetime или timestamp то:
// Начало часа
$N1 = date("2015-07-26 14:00");
// Конец часа
$N2 = date("2015-07-26 15:00");

//Теперь простой запрос с BEETWEN
SELECT `column_name`
FROM `table_name`
WHERE `time` BETWEEN $N1 AND $N2

Ну по sql-запросу с переменными псевдокод, встройте их в строку правильно только ))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы