使用PHP,MYSQL(PDO)按一个日期时间排序两个表

时间:2017-12-09 11:50:52

标签: mysql sql

以下是我正在与很长时间斗争的一些疯狂问题: 我有两个结构相同的表,我们假设它们是dogs_tablecats_table

dogs_table:
-id
-dog_posts
-dog_date

cats_table:
-id
-cat_posts
-cat_date

我想创建一个dog_postscat_posts的时间轴,与此类似: enter image description here dog_posts应该转到左侧,而cat_posts应该转到右边,但它们必须连接在一起,因为它是一个表,按每个表的日期时间排序。 (无论哪种方式,时间线粉碎)。到目前为止,我尝试使用类似的UNION

SELECT cat_posts as posts, cat_date as date, 'cats' as type from cats_table
UNION
SELECT dog_posts as posts, dog_date as date, 'dogs' as type from dogs_table
ORDER BY date desc

但是这种或类似的UNION方式对我来说绝对不起作用,因为狗和猫都是一体的,我需要能够输出row dog_posts或cat_posts。所以,我想知道是否有比使用UNION更好的方法,或者也许有一种方法可以用UNION来实现这个结果,但我只是不知道正确的语法。我也不知道如何使用JOIN ......所以,任何帮助都将受到高度赞赏,非常感谢大家的关注。

1 个答案:

答案 0 :(得分:1)

我在评论中写的另一种方法是完全外部联接。 通常我不使用完全外连接,但是当我这样做时,我使用以下方法:从两个表的连接列中选择所有不同的值(在dog_datecat_date中案件)。在子查询中使用它,并在该列上连接两个表。

select dogs.dog_post, dates.date, cats.cat_post
from (
    select dog_date as date from dogs_table
    union 
    select cat_date as date from cats_table
) dates
left join dogs_table dogs on dogs.dog_date = dates.date
left join cats_table cats on cats.cat_date = dates.date
order by dates.date

然而 - 如果多行的日期相同,我也不知道你要做什么。