0

みんな、

mySQLデータベースのクエリでこの種の制限を行う方法があるかどうか私はただ興味があります:

これが私のテーブルです:

Events
   event_id   event_title   creation_time

Images
   image_id   src   event_id

Comments
   event_comment_id   event_comment   event_id

作成時間でソートされたイベントを取得し、イベントごとに3つの画像と3つのコメントのみを取得したいと思います。

ヘルプ、リソース、または批判は大歓迎です。ありがとうございました

4

1 に答える 1

1

これが1つのアプローチです。基本的に、コメント/画像の各グループに関連付けられた行番号を取得し、最大 3 つまで表示します。

SELECT E.*, 
  MAX(CASE WHEN I.rn = 1 THEN I.Image_Id END) Image1, 
  MAX(CASE WHEN I.rn = 2 THEN I.Image_Id END) Image2, 
  MAX(CASE WHEN I.rn = 3 THEN I.Image_Id END) Image3, 
  MAX(CASE WHEN C.rn = 1 THEN C.event_comment_id END) Comment1, 
  MAX(CASE WHEN C.rn = 2 THEN C.event_comment_id END) Comment2, 
  MAX(CASE WHEN C.rn = 3 THEN C.event_comment_id END) Comment3
FROM Events E
   LEFT JOIN (SELECT @curRow:=IF(@prevRow = event_id, @curRow + 1, 1) rn,
           Image_Id, src, event_id, @prevRow:= event_id
         FROM Images
           JOIN    (SELECT @curRow := 0) r
         ) I ON E.event_id = I.Event_id
   LEFT JOIN (SELECT @curRow2:=IF(@prevRow2 = event_id, @curRow2 + 1, 1) rn,
           event_comment_id, event_comment, event_id, @prevRow2:= event_id
         FROM Comments
           JOIN    (SELECT @curRow2 := 0) r
         ) C ON E.event_id = C.Event_id 
GROUP BY E.Event_Id
ORDER BY E.Event_Id, E.creation_time DESC

そして、ここにSQL Fiddleがあります。

于 2013-02-16T23:49:55.383 に答える