【发布时间】:2017-02-01 03:54:29
【问题描述】:
这可能很明显,我可能完全忽略了这一点,但我有一个包含多行的表,其中包含 user_id、site_id,例如
ldstaff | ld_site
____________________
3 1
3 2
4 1
最初由一位老开发人员编写的 MySQL 查询让员工 id 找到他们的名字,然后将所有站点连接在一起以制作这样的东西。
StaffID | Name | sites
3 Dave 1,2
这个查询最初写成
SELECT `ld_staff` as staffID ,a.name,GROUP_CONCAT(`ld_site`) as sites FROM `lead_distribution` l
LEFT JOIN users a ON a.crm_id = l.ld_staff
WHERE ld_enabled = 1 AND
`account_type` = 1 AND `active` = 1 AND `no_more` = 0 AND network_team > 0 AND renewal_team = 0
GROUP BY `ld_staff`
但是,每当我们尝试在 Laravel 中将其作为新系统的一部分编写以获得相同的结果时,都会出现错误 SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 no无论我们如何尝试篡改查询,它总是会回到这一点。读起来似乎 sql_mode only_full_group_by 不允许这种类型的查询,所以我将 sql_mode 更改为 = " " 并且此错误仍然存在。
查询
$data = DB::table('lead_distribution')
->join('users', 'ld_staff', '=', 'users.crm_id')
->select("lead_distribution.ld_staff", 'users.name',
DB::raw("GROUP_CONCAT(`ld_site`) as sites"))
->where('users.account_type', '=', 1)
->where('users.active', '=', 1)
->where('users.no_more', '=', 0)
->where('users.network_team', '>', 0)
->where('users.renewal_team', '=', 0)
->groupBy('lead_distribution.ld_staff')
->get();
【问题讨论】:
-
要禁用 sql_strict 模式,您可以尝试在您的
database.php中使用'strict' => false; -
OH MY GOD,真是个笨蛋,谢谢
-
这真是他妈的疯了,我浪费了一整天,无论如何感谢stackoverflow.com/users/3687745/jaysingkar
标签: php mysql laravel mysql-error-1055