Как выбрать 1 последнюю новость для каждой категории с предложением соединения в MySQL? - PullRequest
0 голосов
/ 24 октября 2011

У меня есть две таблицы. Я хочу показать последние новости в каждой смежной категории на главной странице. Поэтому я хочу спросить: «Как я могу выбрать 1 последнюю новость для каждой категории с предложением объединения в MySQL?» :

category_table:

id|category_name|
--+-------------+
1 | Sport       |
2 | Policy      |
3 | Hot News    |

all_news_table:

id | category_id | title
---+-------------+---------------
1  |3            | addsad
2  |2            | asdad
3  |1            | sdadasdasd
3  |2            | sdadasdasd
4  |1            | dsasdas
5  |3            | asdasdasd
6  |3            | sdasdas 

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Предположим, что более высокий идентификатор обозначает «более новые» новости.

Сначала выберите самый высокий идентификатор для категории новостей в подвыборке, затем выберите все данные для этих новостей.

SELECT c.category_name, a.title, a.body
FROM all_news_table a
INNER JOIN category_table c ON (a.category_id = c.id)
WHERE a.id IN (
    SELECT max(a1.id) FROM all_news_table a1
    GROUP BY a1.category_id)
0 голосов
/ 24 октября 2011

Другая возможность:

SELECT c.category_name, a.title, a.body
  FROM all_news_table a
 INNER JOIN category_table c ON c.id = a.category_id
  LEFT JOIN all_news_table a2 ON a2.category_id = a.category_id
                             AND a2.id > a.id
 WHERE a2.id IS NULL

Что касается ответа Йохана, для этого могут потребоваться индексы category_id и id и предполагается, что у вас есть ограничение NOT NULL для столбца id таблицы all_news_table.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...