Я пробовал много вариантов этого, однако 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