所以,我有一个数据库与列表。列表中的项目有一个user_id附加到他们,我已经做了一个查询来计数和分组他们,但因为我已经在DB::Select
和原始SQL中执行此操作,从user_id
到实际用户的关系已经丢失。如何连接数组与表(链接ID与数组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民: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
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)
EDIT 2 Laravel想附加GROUP BY,现在已得到解决。
不应该'SELECT user_id,COUNT(*)AS num'包含'username'吗?也许可能使用左连接? – frz3993
那么,用户名是在另一个表中,所以当前唯一被列出的是user_id和num。将检查这个左连接。 – Stoff
左连接返回没有更多atm,可能是做错了tho ..仍然得到: 数组: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 } ] – Stoff