Выбрать последний элемент в категории, которая соответствует определенным критериям - PullRequest
1 голос
/ 26 апреля 2010

Предположим, у меня есть база данных с двумя таблицами: categories и articles. Каждая статья относится к категории.

Теперь давайте предположим, что я хочу получить последнюю статью каждой категории, которая соответствует определенным критериям (читай: статья делает). Если бы не этот дополнительный критерий, я мог бы просто добавить столбец с именем last_article_id или что-то похожее на таблицу categories - хотя это не было бы должным образом нормализовано.

Как я могу это сделать? Я предполагаю, что есть что-то, использующее GROUP BY и HAVING?

Ответы [ 3 ]

1 голос
/ 26 апреля 2010

Попробуйте с:

   SELECT * 
     FROM categories AS c
LEFT JOIN (SELECT * FROM articles ORDER BY id DESC) AS a
       ON c.id = a.id_category
      AND /criterias about joining/
    WHERE /more criterias/
 GROUP BY c.id
0 голосов
/ 26 апреля 2010

Предполагая, что идентификаторы в таблице статей представляют постоянно растущие числа, это должно работать. Использование идентификатора не является семантически правильным ИМХО, вам следует использовать поле тампона даты / времени, если оно доступно.

SELECT * FROM articles WHERE article_id IN
  (
    SELECT 
      MAX(article_id) 
    FROM
      articles 
    WHERE [your filters here]
    GROUP BY 
      category_id
  )
0 голосов
/ 26 апреля 2010

Если вы предоставите нам схемы таблиц, мы могли бы быть более конкретны, но вы можете попробовать что-то вроде ( 12.2.9.6. СУЩЕСТВУЕТ, а НЕ СУЩЕСТВУЕТ , ВЫБРАТЬ Синтаксис для LIMIT )

SELECT  *
FROM    articles a
WHERE   EXISTS  (   
                    SELECT  1 
                    FROM    articles 
                    where   category_id = a.category_id
                    AND     <YourCriteria Here>
                    ORDER BY    <Order Required : ID DESC, LastDate DESC or something?
                    LIMIT 1
                )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...