2016-04-24 45 views
2

我有三个表:事件,地点和预订。 活动有许多景点(日期时间)和 景点有很多预订。两个一对多的关系 - 每个事件有很多点,每个点有很多预订

我在景点表中有'spaces'列,在预订表中有'spot_id'。而在景点表中,我需要总和所有空格GROUP BY event_id,并在预订表中我需要计算所有预订GROUP BY event_id。这两个表都有event_id。

我需要查询类似:

select S.event_id, sum(S.spaces), count(B.spot_id) 
from spots S, bookings B 
where S.event_id = B.event_id; 

我需要输出,如:

Event_id  sum(Spaces)  count(Bookings) 
    1    300     60 
    2    450    120 

但由于其一对多的关系,我得到的空间错总和。如果我有60个预订= 60行,因此60 *实际sum_of_spaces。那是因为我有多个单项赛事的点。

如何从表格中获取event_id和sametime的空间总数获取所有预定event_id的计数。点表中的行数与预订中的行数不匹配。

bookings table

spotstable

回答

0

试试这个:

$events = DB::table('bookings') 
      ->join(DB::raw('(select S.event_id, sum(S.spaces) as sum_spaces from spots S group by S.event_id) d'), function($join) 
      { 
       $join->on('bookings.event_id', '=', 'd.event_id'); 
      }) 
      ->select('bookings.event_id', 'd.sum_spaces', 
         DB::raw('COUNT(bookings.event_id)')) 
      ->groupBy('bookings.event_id') 
      ->get(); 
+0

我试着上面的查询a nd它没有得到正确的空间总和。我为事件1和6次预订提供了62个空间。但是我获得了438个空间和24个预订 –

+0

向我们显示您的餐桌数据,以便我们不必猜测。 –

+0

我已经添加了两张表的屏幕截图。请看看它。 –

0

可以计算sum(spaces)第一和加入(衍生)与bookings导致计算count(bookings)

select event_id, sum_spaces, count(b.event_id) count_bookings 
from (
    select S.event_id, sum(S.spaces) as sum_spaces 
    from spots S 
    group by S.event_id 
) d 
join bookings b on b.event_id = d.event_id 
group by b.event_id 
+0

我想他想要一个Laravel PHP查询。 –

+0

@TimBiegeleisen - 当用'sum','count'和派生表查看例子时,我看到很多'raw'被使用。那么,为什么不把完整的查询放在单个DB :: raw中呢? –