2014-05-24 31 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