2014-01-10 144 views
0

我有两个表,一个包含事件详细信息(名称,时间等),另一个包含客户为每个事件所做的预订记录。我希望能够查询数据库并获取包含事件表中所有字段的结果集合,以及这些事件中每个事件的预订数量,例如:SQL - 根据查询结果从一个表中获取计数

event_name, event_time,total_spaces_available,number_of_bookings

目前我通过循环遍历PHP中的结果来解决这个问题,但是可以在SQL中执行吗?

我希望能够做一些事情,如:

SELECT *, COUNT(SELECT * FROM bookings WHERE event_id=<VARIABLE>) FROM events 

但我不知道语法

我在MySQL

我任何帮助,将不胜感激!

回答

3

可能的解决方法与相关子查询:

SELECT e.event_name, 
    e.event_time, 
    e.total_spaces_available, 
    (SELECT count(*) FROM bookings b WHERE b.event_id=e.event_id) AS number_of_bookings 
FROM events e 

编辑:在评论中提到的一样,这可能比加入解决方案少高性能。 尽管我相信最新的MySQL会将它们转换为加入。

+0

这是一个不好的做法,因为如果你有1000个事件,mysql可能会对预订做1000个子查询,每个事件一个。不能保证优化将会起作用,并将其重写为高效。子查询不可取。 – saamorim

+1

@saamorim。 。 。相关的子查询可能是执行此查询的最有效方式,特别是当有“预订(event_id)”索引时。如果您有其他表现的比较,我会有兴趣听到它。 –

+0

这应该没问题 - 检查计划。 – Randy

1

做一个group by

Select event_name, event_time, total_spaces_available, count(1) number_of_bookings 
    from events 
    inner join booking on events.id = bookings.event_id 
    group by event_name, event_time, total_spaces_available 
相关问题