加入的 Laravel 查询生成器计数

Posted

技术标签:

【中文标题】加入的 Laravel 查询生成器计数【英文标题】:Laravel Query Builder count from join 【发布时间】:2016-10-07 00:25:00 【问题描述】:

所以在我的数据库中,我有一个名为website_tags 的表,其中包含id, title 等等,我还有一个名为websites 的表,具有类似的结构。还有一个表叫做assigned_tags,它包含标签和网站之间的关系,所以它包含关系id, tag_id and website_id

我需要将这些表与查询连接起来,我需要获取所有标签并计算这些标签的使用次数。因此,例如 website_tags 包含以下信息:

1: men
2: women

并且分配的标签包含像 id: tag_id: website_id

1: 1: 1
2: 1: 2
3: 2: 2

所以我会得到标签 'men' 在 2 个网站中使用,标签 'women' 在 1 中使用。我应该如何构建查询? 现在我有:

DB::table('website_tags')
->join('assigned_tags', 'website_tags.id', '=', 'assigned_tags.tag_id')
->select('website_tags.id as id', 'website_tags.title as title', DB::raw("count(assigned_tags.tag_id) as count"))-
>get();

但这是错误的,这个查询只计算assigned_tags中的行数。

【问题讨论】:

【参考方案1】:

您必须定义 groupBy 以便查询知道如何计算它(就像在常规 SQL 中一样)

试试这样的

DB::table('website_tags')
->join('assigned_tags', 'website_tags.id', '=', 'assigned_tags.tag_id')
->select('website_tags.id as id', 'website_tags.title as title', DB::raw("count(assigned_tags.tag_id) as count"))
->groupBy('website_tags.id')
->get();

【讨论】:

以上是关于加入的 Laravel 查询生成器计数的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Fluent 查询生成器加入子查询

laravel 查询构建器计数关系

如何使用 Laravel 的流畅查询构建器选择计数?

Laravel json join,尝试加入具有多个 id 的 JSON 列和具有位置 id 的位置表,查询生成器

如何在 laravel 查询生成器中为同一列构建多个条件的查询?

如何检查表是不是已在 Laravel 查询生成器中加入