【问题标题】:How to join array with table(Link ID in array with table ID)如何将数组与表连接(数组中的链接 ID 与表 ID)
【发布时间】: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 num FROM 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 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');

标签: php mysql arrays laravel join


【解决方案1】:

想通了。它希望在末尾添加一个“用户名”作为附加的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2014-08-06
    • 2012-11-30
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多