我有以下表格:
表用户
| id | profile_img |
--------------------
| 21| name.img|
| 22| name.img|
| 33| name.img|
表user_translations
|id | user_id |first_name |
--------------------------
| 1| 21 | panais |
| 2| 22 | andreas|
| 3| 33 | minas |
关于
的表格| id | user_id |
----------------
| 1| 33 |
| 2| 22 |
| 3| 21 |
表格事项
| id | user_id |
----------------
| 1| 33 |
| 2| 22 |
| 3| 21 |
| 4| 21 |
| 5| 33 |
每个用户都可以写
关于
的文章about table
的文章和things table
我想让所有用户获得文章总数。换句话说,我想从上面user_translations
表中得到那些minas已经写了3篇文章。
感谢任何帮助。
我已经发布了答案
答案 0 :(得分:1)
我无法帮助您使用laravel的查询构建器,但在纯mysql中,您需要的查询类似于:
SELECT ut.`firstname`,ut.`lastname`,COUNT( DISTINCT(a.`id`) ) + COUNT( DISTINCT(t.`id`) ) as total_articles
FROM `user_translations` ut
INNER JOIN `about` a ON a.`user_id`=ut.`user_id`
INNER JOIN `things` t ON t.`user_id`=a.`user_id`
GROUP BY ut.`user_id`
所以也许你可以使用DB::raw
并获得你想要的东西
答案 1 :(得分:0)
我不确定我是否理解这个问题,但是此查询会列出users表中的所有用户,然后列出他们在about和things表中的条目数:
SELECT users.ID, user_translations.first_name, COUNT(DISTINCT about.ID) AS abt, COUNT(DISTINCT things.ID) as thg
FROM users LEFT JOIN user_translations ON users.ID = user_translations.UserID
LEFT JOIN about ON users.ID = about.userID
LEFT JOIN things ON users.ID = things.userID
GROUP BY users.ID, user_translations.first_name
答案 2 :(得分:0)
没有laravel @George Pant有一个很好的答案。
Laravel查询构建器回答问题:
DB::table('users')
->join('about', 'users.id', '=', 'about.user_id')
->join('things', 'users.id', '=', 'things.user_id')
->join('user_translations', 'users.id', '=', 'user_translations.user_id')
->where('user_translations.locale', '=', 'en')
->select('first_name', 'last_name', 'user_translations.user_id',
DB::raw('count(DISTINCT(things.id)) + count(DISTINCT(about.id)) as articles')
)
->groupBy('first_name', 'users.id')
->get();