加入的 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 json join,尝试加入具有多个 id 的 JSON 列和具有位置 id 的位置表,查询生成器