mysql - 在 MySQL 或查询生成器中使用 LEFTJOIN 进行 SELECT 和 COUNT

标签 mysql sql laravel-5 count left-join

我有表 Company

+--------------------------+
| id |        companyname  |
+--------------------------+
| 1  |        JACK         |
| 2  |        ANDY         |

和表Job

+--------------------------------+
| id | id_com |    title job     |
+--------------------------------+
| 1  |    1   |     php          |
| 2  |    1   |     mysql        |    
| 3  |    1   |     html         | 
| 4  |    2   |     css          |

我想要这样的结果:

id | company name |  Number of job |
+----------------------------------+
1  |  JACK        |      3         |
2  |  ANDY        |      1         |
  • 工作属于公司
  • 公司有很多工作

我如何使用 Mysql 或 Query Builder Laravel 做到这一点?

最佳答案

不少于不少于:

SQL Fiddle

查询 1:

    SELECT c.id, c.companyname, count(j.id) AS nb 
    -- `sum(if(j.field IS NOT NULL, 1,0)) AS nb`
    -- may be used if you always have a join
    -- and want to check `j.field` instead
    FROM Company c
    LEFT JOIN Job j
        ON j.id_com = c.id
    GROUP BY c.id, c.companyname

Results :

| id | companyname | nb |
|----|-------------|----|
|  1 |        JACK |  3 |
|  2 |        ANDY |  1 |
|  3 |        VOID |  0 |

对于 Laravel,应该是这样的:

$r = DB::table('Company')
    ->leftJoin('Job', 'Job.id_com', '=', 'Company.id')
    ->select(
        DB::raw('Company.id, Company.companyname, count(Job.id) AS nb'))
    ->groupBy(
        'Company.id', 
        'Company.companyname')
    ->get();

关于mysql - 在 MySQL 或查询生成器中使用 LEFTJOIN 进行 SELECT 和 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45256018/

相关文章:

php - Laravel 中的用户关注系统

php - 使用 phpmyadmin 手动输入数据库时​​是否可以对密码进行哈希处理?

php - 使用ajax检索数据库

php - 双 if 与数据库查询

java - 测试 View 是否存在,但我的方法返回 false - 它应该返回 true

python - SQL Alchemy 在 before_update 上获取脏更新列

php - 从wordpress数据库查询作者信息

mysql - 将数据库从本地主机更改为外部主机

MySQL:仅按连接的行分组

php - 验证请求中的验证 Hook 后