香港专业教育学院尝试过这种变化的很多,但是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中选择*其中vendorsaccount_id = 106和vendorsaccount_id不为null并且version_id =(供应商的SELECT MAX(version_id))和vendorsdeleted_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")


另外,为避免歧义的列,在表名之前使用表名或别名

07-28 02:50