6

我正在尝试复制这里显示的逻辑。但是,当有连接时,我没有任何运气。以下是我的查询的最小化版本:

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

简而言之,我得到一个列表,其中包含类别 ID,我想将结果限制为不超过n个类别的结果,例如,每个 catRef 仅显示两个结果:

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

2 回答 2

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 ...
于 2012-05-22T22:11:46.913 回答
0

在 MySQL 缺少窗口函数的情况下,答案并非微不足道。这是一个使用 MySQL 的 GROUP_CONCAT 选择每组前 N 条记录的技巧: MySQL: Selecting Top N Records Per Group

作为一个聚合函数,可以操纵 GROUP_CONCAT 以提供所需顺序的串联字符串。使用文本操作,字符串被解析。可选地,将值转换为正确的类型。

于 2012-07-06T17:03:04.817 回答