web-dev-qa-db-ja.com

Laravelクエリビルダーの結合からのカウント

したがって、私のデータベースには、website_tagsなどを含むid, titleというテーブルがあり、同様の構造のwebsitesというテーブルもあります。また、assigned_tagsというテーブルがあり、タグとWebサイト間の関係が含まれているため、関係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つのWebサイトで使用され、タグ「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の行をカウントするだけです。

7
Coffee

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();
16
KuKeC