2014-05-10 107 views
1

我有一個非常簡單的表,這裏是值。如何獲取MySQL中每個唯一列值的x行數?

id  photo_name  user_id  created_at 
---------------------------------------------- 
144  Photo1   1   2014-05-01 09:30:15 
143  Photo2   2   2014-05-01 10:30:15 
142  Photo3   1   2014-05-01 11:30:15 
141  Photo4   3   2014-05-01 12:30:15 
140  Photo5   1   2014-05-01 13:30:15 
139  Photo6   2   2014-05-01 14:30:15 
139  Photo6   2   2014-05-01 14:30:15 

預期結果

我想限制每USER_ID

id  photo_name  user_id  created_at 
---------------------------------------------- 
144  Photo1   1   2014-05-01 11:30:15 
142  Photo3   1   2014-05-01 12:30:15 
143  Photo2   2   2014-05-01 13:30:15 
139  Photo6   2   2014-05-01 14:30:15 
141  Photo4   3   2014-05-01 14:30:15 

我試過多種方法,但無法獲得所需的結果 照片。提前感謝您的幫助!

回答

1

在MySQL最簡單的方法是使用變量:

select id, photo_name, user_id, created_at 
from (select p.*, 
      @rn := if(@uid = user_id, @rn + 1, 1) as rn, 
      @uid := user_id 
     from photos p cross join 
      (select @uid := -1, @rn := 0) var 
     order by user_id 
    ) p 
where rn <= 2; 

沒有使用標準的SQL另一種方式:

select p.* 
from photos p 
where 2 >= (select count(*) 
      from photos p2 
      where p2.user_id = p.user_id and 
        p2.id <= p.id 
      ); 

什麼子查詢的查詢確實是由給定數的照片數量用戶。 p2.user_id = p.user_id將查詢限制爲僅用戶。 p2.id <= p.id進行排序。因此,用戶的最低id只有一個匹配(本身),計數爲1。下一個有兩個匹配 - 最低和本身 - 所以這個值是2.等等。

+0

你能幫忙解釋一下「p2.id <= p.id」的用法嗎?謝謝 – Devyn

相關問題