在mysql或Query Builder中使用LEFTJOIN进行SELECT和COUNT

时间:2017-07-22 15:08:06

标签: 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执行此操作?

2 个答案:

答案 0 :(得分:2)

不低于:

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

答案 1 :(得分:0)

var parentnode = node.ParentNode.ParentNode.ParentNode.FirstChild.NextSibling