2014-05-24 30 views
0

我必須寫這個查詢,我想我需要一些幫助。 我在Mysql中使用CodeIgniter(最新版本)。使用CI活動記錄的棘手sql查詢

我有這樣的小桌子「事件」與如下因素構成:

enter image description here

我想要做的是爲每個venue_id選擇2個事件。

查詢的結果會是這樣的:

Venue_id number 1 : event1, event 2 
venue_id number 2 : event 5, event 6 

換句話說,並且僅僅是明確的。我需要選擇每個俱樂部2個事件。

我想是這樣的:

SELECT * FROM (`events`) GROUP BY `venue_id` LIMIT 2 

但我需要GROUP BY和venue_id

限制有沒有辦法只能通過SQL查詢來做到這一點,或者我應該指望PHP解決它?

回答

1

如果你只是想事件ID,然後使用group_concat()substring_index()

select e.venue_id, substring_index(group_concat(e.id), ',', 2) 
from events e 
group by e.venue_id; 

如果你想完整記錄了兩個會場,我採取這種做法:

select e.* 
from events e join 
    (select venue_id, min(id) as minid, max(id) as maxid 
     from events 
     group by venue_id 
    ) v 
    on e.venue_id = v.venue_id and 
     (e.id = minid or e.id = maxid); 

編輯:

以下是起牀給定的地點爲「n」事件的一種方式:

select e.* 
from events e 
where n >= (select count(*) 
      from events e2 
      where e2.venue_id = e.venue_id and 
        e2.id <= e.id 
      ); 
+0

我喜歡第二種方法,但是如果我想要得到3個事件,或者說只有1個事件呢? – Alucard

+0

'這裏n <='應該是'哪裏n> ='但是你得到了man,thx – Alucard

+0

@Alucard。 。 。關於'> ='完全正確,固定。 –

1

例如,我有點困惑,因爲表中沒有活動的屬性,但它存在於您的查詢中。

如果它的任何兩個事件

SELECT e1.venue_id, MIN(e2.name), MAX(e2.name) 
FROM events e1 
JOIN events e2 
    ON e1.venue_id = e2.venue_id 
GROUP BY e1.venue_id 
+0

剛纔編輯後取出'active'屬性。 我也許沒有很好地解釋我自己:我只想要2個同樣的事件'venue_id' – Alucard