Синтаксическая ошибка или нарушение доступа с помощью SUM () в таблице Query Builder - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь обменять db::select() на db::table(), чтобы я мог использовать нумерацию страниц, но так как у меня в запросе sum() и я получаю ошибку.

Мой квест: Как использовать sum () и результаты заказа с помощью Query Builder :: table?

Моя старая, но рабочая попытка

$query = 'SELECT SUM(votes.votes) AS c, sites.id, sites.user_id, sites.url, sites.type_id, sites.img_src, sites.details, sites.created_at, sites.updated_at
          FROM sites 
          JOIN votes 
          WHERE sites.id = votes.site_id
          GROUP BY sites.id, sites.user_id, sites.url ,sites.type_id, sites.img_src, sites.details, sites.created_at, sites.updated_at 
          ORDER BY c DESC LIMIT 10');

Моя новая попытка

$test = DB::table('sites')
        ->join('votes', 'site.id', '=', 'votes.site_id')
        ->select(\DB::raw('SUM(votes.votes) AS c'), 'sites.id', 'sites.user_id', 'sites.url', 'sites.type_id', 'sites.img_src', 'sites.details', 'sites.created_at', 'sites.updated_at')
        ->where('sites.id ', '=', 'votes.site_id')
        ->groupBy('sites.id, sites.user_id, sites.url ,sites.type_id, sites.img_src, sites.details, sites.created_at, sites.updated_at')
        ->orderBy('c', 'DESC')
        ->get();

Ошибка

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '.`url ,sites`.`type_id, sites`.`img_src, sites`.`details, sites`.`created_at, si' at line 1 (SQL: select SUM(votes.votes) AS c, `sites`.`id`, `sites`.`user_id`, `sites`.`url`, `sites`.`type_id`, `sites`.`img_src`, `sites`.`details`, `sites`.`created_at`, `sites`.`updated_at` from `sites` inner join `votes` on `site`.`id` = `votes`.`site_id` group by `sites`.`id, sites`.`user_id, sites`.`url ,sites`.`type_id, sites`.`img_src, sites`.`details, sites`.`created_at, sites`.`updated_at` order by `c` desc) ```

1 Ответ

1 голос
/ 06 апреля 2020

Группировка по нескольким полям

Вам нужно разделить строку в методе groupBy, или Laravel примет ее как одно поле:

->groupBy('sites.id', 'sites.user_id', 'sites.url' ,'sites.type_id', 'sites.img_src', 'sites.details', 'sites.created_at', 'sites.updated_at')

Сравните два столбца по whereColumn

->where('sites.id ', '=', 'votes.site_id')

будет сравнивать столбец sites.id со строкой "votes.site_id", вам нужно использовать whereColumn для сравнения двух столбцов:

->whereColumn('sites.id ', '=', 'votes.site_id')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...