2012-05-22 70 views
6

我试图复制显示here的逻辑。但是,当有连接时我没有任何运气。下面是我的查询的最小化版本:N-per-group with JOIN

SELECT resources.title, catRel.catRef 
FROM resources 
LEFT JOIN placesRel ON placesRel.refId = resId 
LEFT JOIN catRel ON refId = resId 
WHERE ... 

总之,我得到一个列表,其中包含的类别ID,我想限制的结果,具有从类别不超过ñ结果,例如,每个catRef只显示两个结果:

title    catRef 
Swizz Gubbinz  1 
Runcible Spoons 1 
Peter Pan DVD  2 
Button Moon  2 
Monkey Alan  3 
Bilge Pump  3 
+0

'WHERE catRef <= 2'? – eggyal

+0

标题和catRef是否都来自资源? –

+0

我已经更新了线程,使其更具体一些,因为我给出的输出示例建议我一直在寻找catRef = 2。标题在资源中,catRef在catRel中。 –

回答

2

如何在连接中使用子查询。我不确定哪个表的refID和resID属于,但是.....

SELECT resources.title, catRel.catRef 
FROM resources 
LEFT JOIN placesRel ON placesRel.refId = resId 
LEFT JOIN catRel as cr1 ON cr1.catRel.primaryKey in (select cr2.primaryKey from catRel as cr2 where cr2.refID = resId Limit 0,2) 
WHERE ... 
+1

尚未测试此 - 但这是我想尝试,也许在子查询中的“order by”子句 – ErichBSchulz

0

在缺少来自MySQL的窗口函数时,答案并不简单。 这里有个技巧,通过利用MySQL的GROUP_CONCAT选择每个组的前N条记录: MySQL: Selecting Top N Records Per Group

作为一个聚合函数,GROUP_CONCAT可以被操纵为按照期望的顺序提供连接字符串。使用文本操作,字符串被解析。可选地,值被转换为正确的类型。