使用不同列交叉表

时间:2012-07-03 12:11:34

标签: mysql sql database

所以基本上我有两张桌子

帖子(简单文章)

enter image description here

posts_wall (在该用户墙上发布的文章)

enter image description here

现在我想以某种方式组合它们,并按照它们创建/更新的日期对它们进行排序,如果帖子没有上传,则upload_id列为NULL,即使是来自posts_wall表,所以我有2个目标

  1. 将两个表相交。
  2. 按日期订购。
  3. 还有:

    我应该为timeline添加哪一列?一个像1970年以来的2012-01-0113405848858秒?

    据我所知,我必须INTERSECT他们,但

    SELECT * FROM posts
    INTERSECT
    SELECT * FROM posts_wall
    

    给我语法错误。

    我这样做的原因是,我希望查看USER1有权查看这些帖子的帖子,以及USER1墙上任何用户发布的帖子。

    另一个名为article_or_wall_article的专栏要知道这是一篇文章还是某人墙上的帖子,会很棒,我想要一个优雅的方法

2 个答案:

答案 0 :(得分:0)

你想要一个基于字段的INNER JOIN ......?从您的问题中不清楚您想加入哪个领域。

对于时间戳,在两种情况下都有pro和con - 时间戳需要转换,但允许更容易比较日期。

在MySQL中,您必须指定哪些字段来自哪个表以及如何关联它们。我并没有真正看到"帖子"之间有意义的加入。和" posts_wall"。

如果你想要两组记录,那么你需要两个表之间的UNION:

select field1, field2, field3 from posts
UNION field1, field2, field3 from posts_wall

如果您在其中一个表中没有字段,请选择合适的值和数据类型并替换缺少的字段:

...UNION field1, field2, "NOTHING!" as field3 from posts_wall

答案 1 :(得分:0)

@Row对于两个表的交集,您必须具有相同数量的列。我从下面的问题中理解的是可能对您有帮助的查询

Select * 
from
(
SELECT Posted_by as UserID,title, content, PostedDate
FROM posts
INTERSECT
SELECT  Sended_by as UserID,title, content,PostedWallDate as PostedDate 
FROM posts_wall
)A
Order by PostedDate desc