GroupBy Laravel MySql Query - PullRequest
       13

GroupBy Laravel MySql Query

0 голосов
/ 08 мая 2018

Я пробовал много вариантов этого, однако MySQL не мой самый сильный костюм. Вот запрос, который я имею и пытаюсь выполнить:

$vendors = $this->account->vendors()
            ->whereRaw('version_id = (SELECT MAX(version_id) from vendors)')
            ->groupBy('vendor_code')
            ->orderBy($this->orderBy, $this->sortBy)
            ->paginate($this->display_per_page);

Что я пытаюсь сделать, так это получить самый высокий version_id из каждой группы vendor_code. Но независимо от того, как я структурирую этот запрос, я получаю ошибку. Если бы вы могли указать мне правильное направление, это было бы здорово.

Вот ошибка, которую я получаю:

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 Выражение №1 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец 'eventer.vendors.id', который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by (SQL: выберите * из vendors, где vendors. account_id = 106 и vendors. account_id не является нулевым, а version_id = (SELECT MAX (version_id) от поставщиков) и vendors. deleted_at - это группа с нулем по vendor_code, порядок по name предел смещения 10, смещение 0)

Ниже приведена структура моей таблицы:

id int(10) UNSIGNED NOT NULL,
  account_id int(10) UNSIGNED NOT NULL,
  vendor_code int(10) UNSIGNED NOT NULL,
  version_id int(10) UNSIGNED NOT NULL DEFAULT '1',
  name varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  street varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  city varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  province varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  postal_code varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  phone varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  email varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  website varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  industry varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  created_at timestamp NULL DEFAULT NULL,
  updated_at timestamp NULL DEFAULT NULL,
  deleted_at timestamp NULL DEFAULT NULL

1 Ответ

0 голосов
/ 08 мая 2018

Выберите имя столбца, который находится в группе, по

    ->select("table_name.vendor_code","other_column")

Также, чтобы избежать неоднозначного столбца, используйте имя таблицы или псевдоним перед именем столбца

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...