GroupBy Laravel MySql查询

时间:2018-05-08 03:33:48

标签: php mysql laravel eloquent

我尝试了很多这方面的变化但是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其中vendorsaccount_id = 106和vendorsaccount_id不为null且version_id = (来自供应商的SELECT MAX(version_id)和vendorsdeleted_atvendor_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

1 个答案:

答案 0 :(得分:0)

选择

组中的列名称
    ->select("table_name.vendor_code","other_column")

还要避免在列名称

之前使用不明确的列名表或别名