我尝试了很多这方面的变化但是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);
我想要完成的是从每个vendor_code组中获取最高版本的version_id。但无论我如何构建此查询,我都会收到错误。如果你能指出我正确的方向,那就太好了。
以下是我得到的错误:
SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列" eventer.vendors.id'它在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by不兼容(SQL:select * from vendors
其中vendors
。account_id
= 106和vendors
。account_id
不为null且version_id = (来自供应商的SELECT MAX(version_id)和vendors
。deleted_at
按vendor_code
排序为name
asc limit 10 offset 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
答案 0 :(得分:0)
选择
组中的列名称 ->select("table_name.vendor_code","other_column")
还要避免在列名称
之前使用不明确的列名表或别名