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

Festem

Постоялец
Регистрация
4 Сен 2014
Сообщения
97
Реакции
27
Помогите советом. Есть таблица постов на сайте. И надо найти 10 участников, которые оставили наиболее много постов за 60 минут, за неделю, с сохранением id этих постов.
Т.е. кто-то 100 раз вдень, через каждых 15 минут, а кто-то постит лишь50, но все эти 50 за час. Вот мне надо те кто делает "50 за час", образно говоря
Таблица "posts" имеет поля
usrid | data | post | postid

Мне кажется что одним запросом тут не отделаешься никак. Или все же реально?
 
Последнее редактирование:
ну я конкретный запрос показать не смогу но думаю можно. Указать условие посты за нужный промежуток времени и посмотреть наиболее повторяющихся авторов лимитом в 10шт, и сохранить id постов из этой выборки.
 
таким образом я получу тех кто постил наиболее много за неделю, например. а мне надо узнать кто за неделю постил наиболее много за 60 минут - час. причем неважно было ли это с 00:00 до 01:00 или 12:34 до 13:34
 
таким образом я получу тех кто постил наиболее много за неделю, например. а мне надо узнать кто за неделю постил наиболее много за 60 минут - час. причем неважно было ли это с 00:00 до 01:00 или 12:34 до 13:34
т.е тебе нужно получить, не того человека, который за неделю напостил 10 сообщений, но он оставлял пост один раз в два часа. А ты хочешь увидеть того человека который оставил 3 сообщения в течении часа но кроме этих трех сообщений он больше ничего не постил за всю неделю?
 
Того кто имел максимальное число постов за 60 минут любого отрезка времени - например на протяжении месяца, недели, года. Вроде на тостере подсказали решение

Код:
SELECT *
    FROM (
        SELECT `p1`.`usrid` AS `usrid`, COUNT(*) AS `cnt`,
               `p1`.`data` AS `data`
            FROM `posts` AS `p1`
            JOIN `posts` AS `p2` ON `p1`.`usrid` = `p2`.`usrid`
                AND `p2`.`data` BETWEEN `p1`.`data`
                                AND `p1`.`data`+INTERVAL 1 HOUR
            GROUP BY `p1`.`posts`
            ORDER BY `cnt` DESC
            LIMIT 10
    ) AS `t1`
    JOIN `posts` AS `t2` ON `t1`.`usrid` = `t2`.`usrid`
        AND `t2`.`data` BETWEEN `t1`.`data`
                        AND `t1`.`data`+INTERVAL 1 HOUR
    ORDER BY `t1`.`cnt`, `t1`.`usrid`, `t2`.`data`
 
Последнее редактирование:
Этот запрос делах хз знает что: три самообъединения, а на выходе я так и не понял что.
Особенно порадовало "AND `p1`.`data`+INTERVAL 1 HOUR", что всегда TRUE.
Какой первичный ключ этой таблицы?
 
Тем не менее запрос сделал все то что мне надо было :). Вместо +INTERVAL 1 HOUR я сделал +3600, поскольку дата в юникс формате. Первичный ключ таблицы posts
 
оно?

select
usrid,
count(postid) as postCount,
GROUP_CONCAT(`postid`) as postList​
from
table​
where
data between $data and $data+3600​
group by
usrid​
 
Назад
Сверху