2016-04-21 2 views
3

У меня есть две таблицы. У одного есть статьи (article), какие статические страницы на сайте. Во вторых есть статьи в блогах (blog_article), статьи которых показаны только на странице блога.Выберите или создайте просмотр из последних 3 статей из более чем 1 таблицы

Теперь я хочу показать последние статьи на date на моей домашней странице. Легко показать последние 3 из article или blog_article, но у меня есть проблема, чтобы сделать это с обоих сразу.

Обе таблицы имеют одинаковую структуру, за исключением 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 ... основные команды.

Или создайте представление, но, тем не менее, не удастся выполнить команду выше.

+1

Поиск для 'UNION ALL'. –

+0

Кроме того, ваше соединение не имеет условий соединения! Пропустите этот старый, неявный, разделенный запятой синтаксис соединения, используйте только современный явный синтаксис 'join'! – jarlh

+0

@FelixPamittan спасибо, я думаю, что у меня есть – debute

ответ

2

Вы имеете право идеи, используя 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 
1

Вы должны использовать UNION заявления в 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 
+2

13000 баллов, давая ответ, который должен был быть комментарием. (Это было дано минут назад.) – jarlh

+0

На самом деле, вы нашли свое время, чтобы изменить мою первую версию ответа, вместо того, чтобы отвечать на вопрос самостоятельно? –

+0

Ну, по крайней мере, я не спустил вниз. Серьезно, что первая версия не была ответом, а также тем же, что и уже существующий комментарий Феликса Памиттана. – jarlh

Смежные вопросы