【发布时间】:2017-07-17 06:04:20
【问题描述】:
所以,我有一个带有列表的数据库。列表中的项目附加了一个 user_id,我已经进行了查询以计算它们并将它们分组,但是由于我在 DB::Select 和原始 SQL 中完成了此操作,因此从 user_id 到实际用户的关系已经丢失.
我一直在尝试加入,但到目前为止没有运气,这是我的代码:
这让我得到了带有number(count) 和user_id 的列表。
$updatedToday = DB::select('SELECT user_id, COUNT(*) AS `num` FROM faulty_device WHERE DATE(`updated_at`) = DATE(CURDATE()) AND user_id IS NOT NULL AND (status = 3 OR status = 4 OR status = 5) GROUP BY user_id');
这不起作用,请参阅我的加入尝试:
$updatedToday = DB::select('SELECT user_id, COUNT(*) AS `num` FROM faulty_device JOIN users ON faulty_device.user_id=users.id WHERE DATE(`updated_at`) = DATE(CURDATE()) AND user_id IS NOT NULL AND (status = 3 OR status = 4 OR status = 5) GROUP BY user_id');
我想做的基本上是在我看来使用这个:
@foreach($updatedToday as $updated)
{{$updated->user->username}}
{{$updated->num}}
@endforeach
(显示等用户名:Ted Swansson,人数:15)
但到目前为止,我只能设法让它工作:
@foreach($updatedToday as $updated)
{{$updated->user_id}}
{{$updated->num}}
@endforeach
(显示等 user_id: 5, num: 15)
关于如何解决这个问题的任何想法?
编辑
我让它在 phpmyadmin 中工作,但同样的命令在 laravel 中失败了......
SELECT user_id, username, COUNT(*) AS `num` FROM faulty_device JOIN users ON faulty_device.user_id=users.id WHERE DATE(`updated_at`) = DATE(CURDATE()) AND user_id IS NOT NULL AND (status = 3 OR status = 4 OR status = 5) GROUP BY user_id
说:
语法错误或访问冲突:1055 'database1.users.username' 不在 GROUP BY (SQL: SELECT user_id, username, COUNT(*) AS
numFROM faulty_device 在 faulty_device.user_id=users.id 上加入用户 WHERE DATE(updated_at) = DATE(CURDATE()) AND user_id IS NOT NULL AND (status = 3 OR status = 4 OR status = 5) GROUP BY user_id)
编辑 2 Laravel 想要一个额外的 GROUP BY,现在已经解决了。
【问题讨论】:
-
SELECT user_id, COUNT(*) AS num不应该也包括username吗?也许使用左连接? -
好吧,用户名在另一个表中,所以当前唯一列出的是 user_id 和 num。将检查此左连接。
-
左连接只返回 atm,可能做错了 .. 仍然得到:array:6 [▼ 0 => {#427 ▼ +"user_id": 1 +"num": 2 } 1 => {#187 ▼ +"user_id": 3 +"num": 3 } 2 => {#429 ▼ +"user_id": 13 +"num": 8 } 3 => {#428 ▼ +" user_id": 14 +"num": 5 } 4 => {#432 ▼ +"user_id": 16 +"num": 4 } 5 => {#433 ▼ +"user_id": 27 +"num": 30 } ]
-
当您加入时,它将被包括在内,如果您
SELECT它,它将在那里。喜欢SELECT user_id, username, COUNT(*) AS num -
但是,用户名在另一个表中,要通过user_id加入?我尝试了您的以下操作,但仍然没有运气: $updatedToday = DB::select('SELECT user_id, username COUNT(*) AS
numFROM faulty_device LEFT JOIN users ON faulty_device.user_id=users.id WHERE DATE(updated_at) = DATE(CURDATE()) AND user_id IS NOT NULL AND (status = 3 OR status = 4 OR status = 5) GROUP BY user_id');
标签: php mysql arrays laravel join