Я не понимаю, группа за пунктом в laravel Query:

 DB::table('ipaddress')->select('date', DB::raw('count(id) as total'))
                       ->where('date','>=','now()-interval 6 week')
                       ->groupBy(DB::raw("WEEK(`date`)"))
                       ->get();

Ошибка: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 'kitchen_portal.ipaddress.date' не входит в GROUP BY (SQL: выберите date, подсчитайте (id) как общее количество из ipaddress, где date> = now () - интервальная 6-недельная группа по НЕДЕЛЕ (date))

0
Smritimay Debnath 20 Июн 2019 в 09:01

2 ответа

Лучший ответ

Это должно быть что-то вроде ниже. Существуют правила применения GROUP BY. Вы можете выбрать только тот столбец, в который добавлено агрегированное ИЛИ в предложении GROUP BY. Здесь вы добавляете имя WEEK в GROUP BY, но выбираете непосредственно дату, которая не разрешена.

DB::table('ipaddress')->select(DB::raw("WEEK(`date`)"), DB::raw('count(id) as total'))
                      ->where('date','>=','now()-interval 6 week')
                      ->groupBy(DB::raw("WEEK(`date`)"))
                      ->get();
1
Qirel 20 Июн 2019 в 06:21

Так как вы используете GROUP BY WEEK(date), то вам нужно использовать это в вашем операторе select вместе с вашей агрегатной функцией COUNT().

Вы никогда не можете выбрать больше, чем вы GROUP BY (что здесь WEEK(date)), а также агрегатные функции, такие как COUNT(), SUM(), MAX() и так далее. Введение других значений в ваш оператор выбора может заставить ваш набор результатов возвращать некоторые странные комбинации.

DB::table('ipaddress')->select(DB::raw('WEEK(date) as WeekNo'), DB::raw('COUNT(id) as total'))
                      ->where('date', '>=', 'NOW() - INTERVAL 6 WEEK')
                      ->groupBy(DB::raw("WEEK(`date`)"))
                      ->get();
0
Qirel 20 Июн 2019 в 06:20