0

所以基本上我有两张桌子

帖子(简单文章)

在此处输入图像描述

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

在此处输入图像描述

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

  1. 将 2 个表相交。
  2. 按日期订购。

并且:

我应该添加哪一列timeline?自 1970 年以来的点赞数2012-01-0113405848858秒数?

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

SELECT * FROM posts
INTERSECT
SELECT * FROM posts_wall

给我语法错误。

我这样做的原因是我想查看USER1有权查看它们的帖子,以及任何用户在USER1墙上发布的帖子。

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

4

2 回答 2

0

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

对于时间戳,在这两种情况下都有优点和缺点 - 时间戳需要转换,但可以更轻松地比较日期。

在 MySQL 中,您必须指定哪些字段来自哪个表以及如何关联它们。我真的没有看到“posts”和“posts_wall”之间有意义的 JOIN。

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

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

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

...UNION field1, field2, "NOTHING!" as field3 from posts_wall
于 2012-07-03T12:19:42.527 回答
0

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

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
于 2012-07-03T12:51:57.160 回答