MySql запрос ограничения и упорядочения на уровне соединения - PullRequest
1 голос
/ 01 ноября 2011

У меня есть две таблицы авторов и статей. Я хочу получить список последних статей для каждого автора. Я хочу только одну статью для одного автора. И я хочу, чтобы это было последним. Но я даже не мог понять, с чего начать этот SQL-запрос.

Редактировать

Моя структура таблицы может быть упрощена следующим образом:

authors:
 id
 name
 status
 seo   
articles:
  author_id
  title
  text
  date
  seo

Редактировать 2

Я придумал что-то вроде этого, есть ли здесь очевидные ошибки:

SELECT authors.*, 
(SELECT articles.title FROM articles WHERE author_id = authors.id ORDER BY articles.date DESC LIMIT 1) as title,
(SELECT articles.seo FROM articles WHERE author_id = authors.id ORDER BY articles.date DESC LIMIT 1) as articleseo 
FROM authors 
WHERE authors.status = 1

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

Хорошо, я выяснил, что мне нужно было сделать:

CREATE TEMPORARY TABLE articles2
SELECT max(date) as maxdate, author_id
FROM articles
GROUP BY author_id;

SELECT authors.name, authors.seo, articles.seo, articles.title FROM articles JOIN articles2 ON (articles2.author_id = articles.author_id AND articles2.maxdate = articles.date) JOIN authors on authors.id = articles.author_id WHERE authors.status = 1

Надеюсь, это кому-нибудь поможет.

1 голос
/ 01 ноября 2011

Понятия не имею, какова структура вашей таблицы, но если это то, что я представляю, то сделайте следующее:

SELECT author.name, article.title FROM
    author LEFT JOIN article ON author.id = article.author_id
    GROUP BY author.id
    ORDER BY author.id, article.date DESC
0 голосов
/ 01 ноября 2011

Я сделаю что-то подобное, но если вы опубликуете структуру базы данных, я буду более конкретным

    SELECT * 
    FROM articles,authors 
    WHERE articles.aut = authors.aut
    GROUP BY authors.aut 
    ORDER BY articles.date DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...