【问题标题】:Count and sum multiple columns from different tables对来自不同表的多个列进行计数和求和
【发布时间】:2016-08-10 17:18:56
【问题描述】:

我有以下表格:

表用户

| 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 篇文章。

感谢任何帮助。

更新

我已经发布了答案

【问题讨论】:

  • 尝试使用count(DISTINCT (things.id))count(DISTINCT(about.id))...在下面查看我的答案

标签: mysql sql laravel laravel-5


【解决方案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 得到你想要的

【讨论】:

  • 非常感谢您帮我解答
  • 很高兴我的回答对您有所帮助:)
【解决方案2】:

我不确定我是否理解这个问题,但是这个查询列出了 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

【讨论】:

    【解决方案3】:

    没有 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多