香港专业教育学院尝试过这种变化的很多,但是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:从
vendors
中选择*其中vendors
。account_id
= 106和vendors
。account_id
不为null并且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
最佳答案
选择分组依据中的列名称
->select("table_name.vendor_code","other_column")
另外,为避免歧义的列,在表名之前使用表名或别名