【问题标题】:SELECT and COUNT with LEFTJOIN in mysql or Query Builder在 mysql 或查询生成器中使用 LEFTJOIN 选择和计数
【发布时间】:2017-12-28 14:08:20
【问题描述】:

我有桌子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 做到这一点?

【问题讨论】:

  • 这是一个简单的加入和分组,你试过什么?我敢肯定你不是第一个问这个问题的人
  • 谢谢,这是我使用 Query Builder Laravel 5.4 的代码:$result = company::leftjoin('jos', 'job.id', '=', 'company.id')-> select('company.*', count('job.id'));

标签: mysql sql laravel-5 count left-join


【解决方案1】:

不大于不小于:

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 用于 Query Builder Laravel 5.4
  • @HungNguyen 我没用过 Laravel,给我 5 分钟,我看看文档。
  • @HungNguyen 再试一次,我在评论后编辑了我的答案:忘记了我在 RAW sql 查询中使用的 c 别名。
  • 哦不,真的很抱歉,一切正常,非常感谢
【解决方案2】:
SELECT c.id, c.companyname, count(j.id) AS NumberJobs
FROM Company c
LEFT JOIN Job j ON j.id_com = c.id
GROUP BY c.id, c.companyname

【讨论】:

  • 是的,我喜欢这样,但我之前没有使用 GROUP BY :(,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 2021-01-01
  • 2020-06-12
相关资源
最近更新 更多