根据不同表中的数据创建时间轴

时间:2015-11-09 16:45:57

标签: php mysql

我的脚本中有一些表,我需要从所有表中创建时间轴。主要表格是"帖子" - "喜欢" - "评论"。

帖子表有行:PID - UID - 标题 - time_added 喜欢表有行:LID - PID - UID - time_added 注释表有行:CID - PID - UID - time_added users表有行:UID - 用户名。

我在用户中创建了一个页面'名为:"时间轴"。它应该显示按时间排序的用户操作。 UID指的是用户ID。

浏览该页面时的数据示例:

  1. 用户在xxxx上发表评论xxx_time_added_xxx。
  2. 用户喜欢在xxx_time_added_xxx发布xxxx。
  3. 用户在xxx_time_added_xxx添加了发布xxxx。
    1. 是否有一种方式或MySQL查询可以组合所有这些表并按time_added排列?
    2. 我想创建一个新的MySQL表:user_timeline有行:

      TID - UID - PID - LID - CID
      

      在每个动作(Post,Like,Comment)之后,根据动作在该表中插入新行,并在相应的字段中添加动作ID,并将其他行保留为空。如果可能的话,然后将它们与相关表格结合起来。

1 个答案:

答案 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 ...)

或者,如果您不在子查询中选择相同数量的列:

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'=>'...'));

通过 TYPE ,您知道它是帖子还是其他类似 希望这有帮助