使用CI活动记录的棘手的SQL查询

时间:2014-05-24 00:26:10

标签: php mysql sql codeigniter group-by

我必须写这个查询,我想我需要一些帮助。 我正在使用CodeIgniter(最新版本)和Mysql。

我有这个小表“事件”与下面的结构:

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

但我需要按venue_id

分组并限制

有没有办法只通过sql查询来做到这一点,还是我应该依靠php来解决它?

2 个答案:

答案 0 :(得分:1)

示例,我有点困惑,因为您的表中没有活动属性,但它存在于您的查询中。

如果是任何2个事件

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  

答案 1 :(得分: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
           );