这可能很明显,我可能完全忽略了这一点,但我有一个包含多行 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无论我们如何尝试篡改查询总是回到这个。读起来似乎 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();