Select 或创建 1 篇以上文章的最后 3 篇文章的视图 table
Select or create a view of last 3 articles from more than 1 table
我有两张桌子。一个有文章(article
),什么是网站上的静态页面。其次是博客文章 (blog_article
),这些文章只显示在博客页面中。
现在我想在主页上显示按 date
排序的最新文章。从 article
或 blog_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 方面不是很擅长,我只使用 SELECT
、UPDATE
、DELETE
... 基本命令。
或者创建一个视图,但是上面的命令仍然没有成功。
您需要使用 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 by
和 limit
的想法是正确的,但使用(隐式)连接是错误的。从逻辑上讲,您希望对文章和博客文章一视同仁,这意味着您需要在它们之间 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
我有两张桌子。一个有文章(article
),什么是网站上的静态页面。其次是博客文章 (blog_article
),这些文章只显示在博客页面中。
现在我想在主页上显示按 date
排序的最新文章。从 article
或 blog_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 方面不是很擅长,我只使用 SELECT
、UPDATE
、DELETE
... 基本命令。
或者创建一个视图,但是上面的命令仍然没有成功。
您需要使用 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 by
和 limit
的想法是正确的,但使用(隐式)连接是错误的。从逻辑上讲,您希望对文章和博客文章一视同仁,这意味着您需要在它们之间 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