简体   繁体   English

如何将带有表的数组联接(带有表ID的数组中的链接ID)

[英]How to join array with table(Link ID in array with table ID)

So, I have a database with a list. 因此,我有一个带有列表的数据库。 The items in the list has a user_id attached to them and I have done a query to count them and group them but since I have done this in DB::Select and raw SQL the relation from the user_id to the actual user has been lost. 列表中的项目附有一个user_id,我已经进行了查询以对它们进行计数并对其进行分组,但是由于我已经在DB::Select和原始SQL中完成了此操作,因此从user_id到实际用户的关系已经丢失。

I have been trying with a join, but so far no luck, here is my code: 我一直在尝试加入,但是到目前为止还算不上运,这是我的代码:

This gets me the list with a number(count) and the 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');

This is not working, see my try of a join : 这不起作用,请参阅我的加入尝试:

$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');

What I want to do is basically use this in my view: 我想做的基本上是在我看来使用它:

@foreach($updatedToday as $updated)
    {{$updated->user->username}}
    {{$updated->num}}
@endforeach

(Showing etc username: Ted Swansson, num: 15) (显示等用户名:Ted Swansson,数字:15)

But so far I can only manage to get this to work: 但是到目前为止,我只能设法使它起作用:

@foreach($updatedToday as $updated)
    {{$updated->user_id}}
    {{$updated->num}}
@endforeach

(Showing etc user_id: 5, num: 15) (显示etc user_id:5,数字:15)

Any ideas on how to solve this? 关于如何解决这个问题的任何想法?

EDIT 编辑

I made it work in phpmyadmin, but the same command fails in laravel.... 我在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

Says : 说:

Syntax error or access violation: 1055 'database1.users.username' isn't in 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) 语法错误或访问冲突:1055 'database1.users.username'是不是在GROUP BY(SQL:SELECT USER_ID,用户名,COUNT(*)AS num从faulty_device用户加入ON faulty_device.user_id = users.id WHERE DATE( updated_at )= DATE(CURDATE())AND user_id不为空AND(状态= 3 OR状态= 4 OR状态= 5)GROUP BY user_id)

EDIT 2 Laravel wanted an additional GROUP BY, it is now resolved. 编辑2 Laravel想要一个额外的GROUP BY,现在已解决。

Figured it out. 弄清楚了。 It wanted an "username" at the end as an additional GROUP BY. 它最后需要一个“用户名”作为附加的GROUP BY。

SELECT user_id, username, COUNT(*) AS `num` FROM 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, username

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM