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 ごとに 2 つの結果のみを表示します。

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 に答える