Подзапрос с лимитом - PullRequest
2 голосов
/ 18 мая 2011

У меня есть сайт с категориями и темами. Некоторые категории являются родителями / детьми друг друга (только один вложенный уровень). Я пытаюсь выбрать самую свежую тему из каждого семейства категорий (то есть не более одной темы от одного из родителей или ребенка). Вот что я сейчас пытаюсь:

SELECT topics.id
FROM topics, categories
WHERE topics.category_id = categories.id
AND ( categories.id IN ( 1, 2, 3 )
      OR categories.parent IN ( 1, 2, 3 ))
ORDER BY topics.posted DESC

Если я выполню этот запрос как есть, он получит все темы. Если я добавлю LIMIT 1 в конце, он получит только 1 всего (не 1 на семью). Если я добавлю LIMIT 3 в конце, он получит 3 самых последних из всех категорий. Я хочу одну тему из каждой категории. Любая помощь?

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Немного грубо, но следует делать то, что вы хотите:

SELECT topics.id FROM
  (SELECT MAX(topics.posted) AS date, categories.id AS id
  FROM topics, categories
  WHERE topics.category_id = categories.id
  AND ( categories.id IN ( 1, 2, 3 )
      OR categories.parent IN ( 1, 2, 3 ))
  GROUP BY categories.id) t1
JOIN topics 
ON topics.posted = t1.date AND topics.category_id = ti.id
0 голосов
/ 18 мая 2011

Я думаю, что вы ищете GROUP BY:

SELECT topics.id,MAX(topics.posted) AS postDate
FROM topics, categories
WHERE topics.category_id = categories.id
AND ( categories.id IN ( 1, 2, 3 )      
OR categories.parent IN ( 1, 2, 3 ))
GROUP BY topics.category_id
ORDER BY topics.posted DESC
...