从超过 1 个表格中选择或创建最近 3 篇文章的视图
Posted
技术标签:
【中文标题】从超过 1 个表格中选择或创建最近 3 篇文章的视图【英文标题】:Select or create a view of last 3 articles from more than 1 table 【发布时间】:2016-04-21 06:51:29 【问题描述】:我有两张桌子。一个有文章(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 |
|----------------------------------------------------------|
我期望的回报:
|----------------------------------------------------------|
| 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
...基本命令。
或者创建一个视图,但是上面的命令仍然没有成功。
【问题讨论】:
搜索UNION ALL
。
另外,你的加入没有加入条件!跳过旧的、隐式的、逗号分隔的连接语法,只使用现代的、显式的 join
语法!
@FelixPamittan 谢谢我想我知道了
【参考方案1】:
您使用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
【讨论】:
【参考方案2】:你需要使用 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
【讨论】:
13000 分,并给出了应该是评论的答案。 (这是几分钟前给出的。) 真的,您花时间抨击我的第一个答案版本,而不是自己回答问题? 好吧,至少我没有投反对票。说真的,第一个版本并没有太多的答案,而且与 Felix Pamittan 已经存在的评论越来越相似。 @jarlh 用户写了一个答案。如果答案解决了问题并返回了预期的结果,那很好。如果你有什么要补充的,你写了另一个答案或者你编辑......如果他有 13000 点或 1 点,那有什么意义?你的挫败感是什么? 作为额外信息,它具有到 UNION 的链接。此外,第一个版本更旨在向其他人表明此问题有答案(正在进行中),以便他们可以专注于帮助他人以上是关于从超过 1 个表格中选择或创建最近 3 篇文章的视图的主要内容,如果未能解决你的问题,请参考以下文章
EXCEL中表格中20位数字怎么后4位出现是0,还有就是是科学数值
如何使用 Mailchimp API 3.0 从用户或兴趣中获取超过 10 个条目?