Select 或创建 1 篇以上文章的最后 3 篇文章的视图 table

Select or create a view of last 3 articles from more than 1 table

我有两张桌子。一个有文章(article),什么是网站上的静态页面。其次是博客文章 (blog_article),这些文章只显示在博客页面中。

现在我想在主页上显示按 date 排序的最新文章。从 articleblog_article 中显示最后 3 个很容易,但我很难同时从两者中显示。

除了 article 之外,两个表的结构相同,我只想获取 cat_id = 3.

的行

这是article:

|----------------------------------------------------------|
| id | name      | content       | date      | cat_id      |
|----------------------------------------------------------|
| 1  | Test 1    | ...           | 2016-01-24 18:26:00 | 3 |
| 2  | Test 2    | ...           | 2016-01-29 18:26:00 | 3 |
| 3  | Test 3    | ...           | 2016-02-07 18:26:00 | 4 |
| 4  | Test 4    | ...           | 2016-02-18 18:26:00 | 1 |
| 5  | Test 5    | ...           | 2016-03-15 18:26:00 | 3 |
|----------------------------------------------------------|

这是blog_article:

|----------------------------------------------------------|
| id | name      | content       | date                    |
|----------------------------------------------------------|
| 1  | Blog 1    | ...           | 2016-03-01 18:26:00     |
| 2  | Blog 2    | ...           | 2016-03-10 18:26:00     |
| 3  | Blog 3    | ...           | 2016-04-08 18:26:00     |
|----------------------------------------------------------|

我期望return:

|----------------------------------------------------------|
| id | name      | content       | date                    |
|----------------------------------------------------------|
| 1  | Blog 3    | ...           | 2016-04-08 18:26:00     |
| 2  | Test 5    | ...           | 2016-03-15 18:26:00     |
| 3  | Blog 2    | ...           | 2016-03-10 18:26:00     |
|----------------------------------------------------------|

我试过这个命令

SELECT article.name AS name, blog_article.name AS name
FROM article,
     blog_article
WHERE article.cat_id = 3
ORDER BY article.date DESC
LIMIT 3

但没有帮助。我在 SQL 方面不是很擅长,我只使用 SELECTUPDATEDELETE... 基本命令。

或者创建一个视图,但是上面的命令仍然没有成功。

您需要使用 MySQL 的 UNION 语句

SELECT name FROM 
    ( ( SELECT article.name AS name, `date` FROM article WHERE article.cat_id = 3 ORDER BY `date` DESC LIMIT 3 )   
    UNION ALL     
    ( SELECT name AS name, `date` FROM blog_article WHERE ORDER BY `date` DESC LIMIT 3 ) ) unified    
ORDER BY `date` DESC LIMIT 3

您使用 order bylimit 的想法是正确的,但使用(隐式)连接是错误的。从逻辑上讲,您希望对文章和博客文章一视同仁,这意味着您需要在它们之间 union all:

SELECT   name
FROM     (SELECT name, date FROM article WHERE cat_id = 3
          UNION ALL
          SELECT name, date FROM blog_article) t
ORDER BY date DESC
LIMIT    3