Mysql 从多个表中选择或创建最后3篇文章的视图

Mysql 从多个表中选择或创建最后3篇文章的视图,mysql,sql,select,top-n,Mysql,Sql,Select,Top N,我有两张桌子。一个人有文章(文章),什么是网站上的静态页面。第二个是博客文章(blog\u article),这些文章只显示在博客页面中 现在我想在我的主页上显示最新文章的订购日期。很容易显示文章或博客文章中的最后3个,但我很难同时从这两个方面进行显示 这两个表的结构都相同,除了文章,在这里我只想用cat_id=3获取行 这是文章: |----------------------------------------------------------| | id | name | co

我有两张桌子。一个人有文章(
文章
),什么是网站上的静态页面。第二个是博客文章(
blog\u article
),这些文章只显示在博客页面中

现在我想在我的主页上显示最新文章的订购日期。很容易显示
文章
博客文章
中的最后3个,但我很难同时从这两个方面进行显示

这两个表的结构都相同,除了
文章
,在这里我只想用
cat_id=3
获取行

这是
文章

|----------------------------------------------------------|
| 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 |
|----------------------------------------------------------|
|----------------------------------------------------------|
| 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      | 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 |
|----------------------------------------------------------|
|----------------------------------------------------------|
| 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
。。。基本命令


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

您需要使用MySQL语句

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

使用
orderby
limit
的想法是正确的,但使用(隐式)联接的想法是错误的。从逻辑上讲,您希望对文章和博客文章一视同仁,这意味着您需要
在它们之间合并所有内容

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

搜索
UNION ALL
。此外,您的加入没有加入条件!跳过旧的、隐式的、逗号分隔的连接语法,只使用现代的、显式的
join
语法@FelixPamittan谢谢,我想我得到了13000分,并且给出了一个应该是评论的答案。(这是几分钟前给出的)真的,你花时间抨击我的第一个答案,而不是自己回答这个问题?好吧,至少我没有投反对票。说真的,第一个版本不是很好的答案,也和Felix Pamittan已经存在的评论差不多。@jarlh用户已经写了一个答案。如果答案解决了问题并返回了预期的结果,就可以了。如果你有什么要补充的,你可以写另一个答案或者编辑。。。如果他得了13000分或1分有什么意义?你的沮丧是什么?作为额外信息,它与工会有联系。此外,第一个版本更倾向于向其他人表明这个问题有答案(正在进行中),以便他们能够专注于帮助他人