Mysql 有限制的子查询

Mysql 有限制的子查询,mysql,subquery,limit,Mysql,Subquery,Limit,我有一个类别和主题的网站。某些类别是彼此的父/子类别(仅一个嵌套级别)。我试图从每个类别系列中选择最新的主题(即,从父或子类别中最多选择一个主题)。以下是我正在尝试的: 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

我有一个类别和主题的网站。某些类别是彼此的父/子类别(仅一个嵌套级别)。我试图从每个类别系列中选择最新的主题(即,从父或子类别中最多选择一个主题)。以下是我正在尝试的:

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个)。如果我在末尾添加
limit3
,它将从所有类别中检索最近的3个。我想从每个类别中选出一个主题。有什么帮助吗?

我相信您正在寻找以下组员:

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

有点粗糙,但应该做你想做的:

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

这是更近的一步,谢谢你;它现在为每个家庭检索一个主题。但是,它不会获取最新的。它将检索每个组中的随机
主题.id
。很抱歉,错过了该部分。您可以将其更改为选择topics.id,MAX(topics.posted)作为postDate FROM…非常感谢!很好地工作嗯,事实上,如果一个家庭中的最新主题属于父母而不是孩子,它只会从孩子那里提取一个主题-我想这是因为我们是按
categories.id
进行分组的。有没有关于如何解决这个问题的想法?谢谢again@andrewtweber如果不了解更多有关结构的信息,就很难了解。可能更改为
按类别分组.id,categories.parent
-这将为每个不同的id父组合选择一个id。这不起作用,但很好。这将检索每个父级和每个子级的最新主题,因此我可以使用PHP来比较父级/子级日期,以找出哪个是最新的。再次感谢:)