#php #mysql #laravel #eloquent
#php #mysql #laravel #красноречивый
Вопрос:
У меня есть этот запрос, который выдает следующий результат
$result = DB::table('contagenshora')
->select(DB::raw('post_id as post_id'), DB::raw('product_id'), DB::raw('max(val) as maxHour'), DB::raw('hour'))
->whereBetween('date', array($dt->toDateTimeString(), $dt2->toDateTimeString()))
->where('hour', '=', $actHour->hour)
->groupBy(DB::raw('post_id'), DB::raw('product_id'))
->get();
Результат: Array ( [0] => stdClass Object ( [post_id] => 1 [product_id] => 1 [maxHour] => 4 ) [1] => stdClass Object ( [post_id] => 1 [product_id] => 2 [maxHour] => 3 ) [2] => stdClass Object ( [post_id] => 4 [product_id] => 0 [maxHour] => 6 ) ) )
Теперь мне нужна сумма «maxHour», но сгруппированная по «post_id», мне нужно что-то вроде этого:
(Например, для post_id = 1 мне нужна сумма 4 3)
Результат: Array ( [0] => stdClass Object ( [post_id] => 1 [maxHour] => 7 ) [1] => stdClass Object ( [post_id] => 4 [maxHour] => 6 ) ) )
Как я могу это сделать?
Ответ №1:
Просто удалите product_id
group by
предложение from и select
затем. Также нет необходимости использовать DB::raw()
для прямого выбора столбцов.
$result = DB::table('contagenshora')
->select('post_id', DB::raw('max(val) as maxHour'))
->whereBetween('date', array($dt->toDateTimeString(), $dt2->toDateTimeString()))
->where('hour', $actHour->hour)
->groupBy('post_id')
->get();
Комментарии:
1. А если мне тоже нужно группировать по часам? Итак, у меня есть maxHour для каждого сообщения и каждого часа. И я хочу суммировать все часы группы по почте. Можете ли вы мне помочь?
2. Вы переходите
hour
к предложению where . Итак, для этой конкретной записи будут показаны результаты. Кстати, сначала попробуйте свои собственные.