Интеллектуальный MySQL GROUP BY для потоков активности

Я создаю поток активности для нашего сайта, и добился приличного прогресса с чем-то, что работает довольно хорошо.

Это'Питание от двух столов:

поток:

id - Уникальный идентификатор элемента потокаuser_id - идентификатор пользователя, который создал элемент потокаobject_type - Тип объекта (в настоящее времяпродавец» или же 'товар')object_id - Внутренний идентификатор объекта (в настоящее время либо идентификатор продавца, либо идентификатор продукта)action_name - действие, предпринятое против объекта (в настоящее время либокупить' или же 'сердце')stream_date - Отметка времени, что действие было создано.hidden - Логическое значение, если пользователь решил скрыть элемент.

следующим образом:

id - Уникальный идентификатор подпискиuser_id - Идентификатор пользователя, инициирующегоСледить' действие.following_user - Идентификатор пользователя, которому следуют.followed - Отметка времени, когда было выполнено следующее действие.

В настоящее время я 'используя следующий запрос для извлечения контента из базы данных:

Запрос:

SELECT stream.*,
   COUNT(stream.id) AS rows_in_group,
   GROUP_CONCAT(stream.id) AS in_collection
FROM stream
INNER JOIN follows ON stream.user_id = follows.following_user
WHERE follows.user_id = '1'
  AND stream.hidden = '0'
GROUP BY stream.user_id,
     stream.action_name,
     stream.object_type,
     date(stream.stream_date)
ORDER BY stream.stream_date DESC;

Этот запрос на самом деле работает довольно хорошо, и с помощью небольшого PHP для анализа данных, которые возвращает MySQL, мы можем создать хороший поток действий с действиями одного и того же типа, объединенными одним и тем же пользователем, если время между действиями не 'слишком велик (см. пример ниже).

У меня вопрос, как мне сделать это умнее? В настоящее время он группируется по одной оси "пользователь» активность, когда конкретный пользователь имеет несколько элементов в течение определенного периода времени, MySQL знает, чтобы сгруппировать их.

Как я могу сделать это еще умнее и группировать по другой оси, например, "object_id» поэтому, если есть несколько действий для одного и того же объекта в последовательности, эти элементы группируются, но сохраняют логику группировки, которая у нас есть в настоящее время для группировки действий / объектов по пользователю. И реализовать это без дублирования данных?

Пример нескольких объектов, появляющихся в последовательности:

Я понимаю, что решения таких проблем могут быть очень сложными, очень быстрыми, но ямне интересно, если естьЭто элегантное и довольно простое решение (надеюсь) в MySQL.

Ответы на вопрос(4)

Ваш ответ на вопрос