2015-11-09 1 views
0

У меня есть несколько таблиц в моем сценарии, что мне нужно создать временную шкалу из всех них. Основными таблицами являются «сообщения» - «нравится» - «комментарии».Создать временную шкалу из данных в разных таблицах

стол сообщений имеет строки: PID - UID - название - time_added.
нравится таблица имеет строки: LID - PID - UID - time_added.
Таблица комментариев имеет строки: CID - PID - UID - time_added.
Таблица пользователей имеет строки: UID - имя пользователя.

Я создаю страницу в профилях пользователей под названием «Временная шкала». Он должен показывать действия пользователя, отсортированные по времени. UID относится к идентификатору пользователя.

пример

данных во время просмотра этой страницы:

  1. Пользователь Ответил на сообщение хххх в xxx_time_added_xxx.
  2. User Понравилось сообщение xxxx в xxx_time_added_xxx.
  3. Пользователь добавил сообщение xxxx в xxx_time_added_xxx.
  1. Есть ли способ или запрос MySQL, который может объединить все эти таблицы и расположить их по time_added?
  2. Я думал о создании новой таблицы MySQL: user_timeline, который имеет строки:

    TID - UID - PID - LID - CID 
    

    И после каждого действия (сообщение, Как, Комментарий) и вставляется новая строка в этой таблице в соответствии с действием и добавить Идентификатор действия в соответствующем поле и оставьте остальные. Затем позвоните в сочетании с соответствующей таблицей, если это возможно.

+0

Да, это возможно. Лучше всего будет писать запросы, которые заполняют вторую таблицу, а затем запрашивать вторую таблицу и сортировать по метке времени. –

ответ

2

вы можете с UNION и ступенчатости:

select * from ((select 1 as type,time_added from posts where ...) union (select 2 as type,time_added from likes where ...) ...) order by time_added asc 

ПРИМЕЧАНИЕ: Выбор столбцов должен иметь тот же порядок в отношении типа столбца.

Не делать:

(select 1 as type,time_added from posts where ...) union (select time_added,2 as type from likes where ...) 

Или, если вы надеваете `t выбрать одинаковое число столбцов в подзапросы:

SQLSTATE[21000]: Cardinality violation: 1222 The used SELECT statements have a different number of columns 

Ваш результирующий набор будет многомерные массив следующим образом:

array(array('type'=>1,'time_added'=>'...'),array('type'=>2,'time_added'=>'...')); 

К ТИПА вы знаете, если это поз t или аналогично Надеюсь, что это поможет

Смежные вопросы