【问题标题】:Join database and count加入数据库并计数
【发布时间】:2014-12-11 17:12:59
【问题描述】:

我正在尝试列出有关一张桌子的信息,其中一个信息是用户拥有多少汽车。我有两个数据库,一个是users,另一个是cars。表cars 有一列是owner,其中包含所有者的id。我想知道的是:如何列出所有用户以及每个用户拥有的汽车总数?

$users = Users::all();

这段代码返回一个包含所有用户的数组,我想要传递每个用户在同一个$users 变量上拥有的汽车总数。我怎样才能做到这一点?有没有办法加入另一张桌子,计数然后返回或类似的东西?

@编辑

我试过这样,但不起作用:

$users = Users::join('cars', 'cars.owner', '=', 'users.id')->select(DB::raw('count(cars.car_id) as total'))->get();

【问题讨论】:

  • 但是->count() 只是针对单个查询,我想知道每个用户。
  • 你有数据透视表设置吗?
  • 数据透视表设置是什么意思?
  • 您是否要在视图中显示它们? (刀)。我可以给你确切的语法。
  • 是的,我是。你的解决方案是什么?

标签: php mysql laravel laravel-4 eloquent


【解决方案1】:

您需要按声明分组:

select users.name, count(*) as counter from users 
join cars on ... group by users.name;

好的,这里更详细:

您必须将 users 表与 cars 表连接起来。你这样做,是的。

然后你必须从用户表中选择一个列和一个计数(*)作为计数器

现在的诀窍是,从 users 表中“分组”col。这将所有双用户行匹配到一行并计算一个用户拥有多少汽车

select语句是:

"select users.id, count(*) as counter from Users join Cars on cars.owner=users.id group by users.id"

仅此而已...希望对您有所帮助

【讨论】:

  • @MrAlmighty。看看this
  • @AliGajani - 我会试试这个。谢谢
  • @Tobi - $users = Users::select(DB::raw('count(*) as counter'))->join('cars', 'cars.owner', '=', 'user.id')->groupBy('users.id')->get(); - 我试过这种方式,它只返回“计数器”,我也需要其他列。
  • 我是这样解决的:$users = Users::select('*', DB::raw('count(*) as counter'))->join('cars', 'cars.owner', '=', 'user.id')->groupBy('users.id')->get();
  • 我现在有另一个问题...我需要根据当前汽车的 id 知道有多少地方销售这些汽车。我试过这样:$users = Users::select('*', DB::raw('count(*) as counter'))->join('cars', 'cars.owner', '=', 'user.id')->join('places', 'places.car', '=', 'cars.id')->groupBy('users.id')->get(); - 它总是只返回1
【解决方案2】:

我想这会对你有所帮助...

Users::with([
              'cars' => function($q){
                           $q->select([DB::raw("count(car_id) as total"), "car_id"])
                             ->groupBy('car_id');
                        }
           ])->get();

【讨论】:

  • 这个是做的,但是现在怎么知道有多少地方卖了用户的车呢? - 查看聊天记录(你在那儿) - Tobi 发布了一个查询,我在尝试转换为 Eloquent 时非常头疼。
【解决方案3】:

您可以尝试使用原始 SQL 查询。我试过了,效果很好。

SELECT users.name as User_Name, COUNT(cars.user_id) as Car_Count
FROM users
LEFT JOIN cars
ON users.id=cars.user_id
GROUP BY users.id

【讨论】:

  • 是的,它有效,我知道,但我还有另一个问题是:现在我在同一个查询中知道在多少地方销售用户拥有的汽车。例如,用户“John Stacey”有 3 辆车,假设每辆车都有一个品牌,每辆车在一个地方销售,那么我们有 3 个销售地方。或多或少是这样的。列表必须是这样的:用户 X 有 N 辆车在 N 个地方销售。
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 2017-07-16
  • 1970-01-01
相关资源
最近更新 更多