Php MYSQL从两个表中左连接月数

Php MYSQL从两个表中左连接月数,php,mysql,Php,Mysql,我想添加表示其他表中的月基本计数的列 我有两张桌子 请假申请 休假日期 我想以基于月份的总假期数结束: userid january fabruary march so on... 1 1 3 1 2 2 0 1 2 3 4 1 对条目进行条件求和,如下所示:- SELECT a.use

我想添加表示其他表中的月基本计数的列

我有两张桌子

请假申请

休假日期

我想以基于月份的总假期数结束:

userid    january     fabruary    march   so on...
1           1           3            1
2           2           0            1
2           3           4            1

对条目进行条件求和,如下所示:-

SELECT a.userid,
        SUM(IF(MONTH(leavedates) = 1, 1, 0)) AS january,
        SUM(IF(MONTH(leavedates) = 2, 1, 0)) AS february,
        SUM(IF(MONTH(leavedates) = 3, 1, 0)) AS march,
        SUM(IF(MONTH(leavedates) = 4, 1, 0)) AS april,
        SUM(IF(MONTH(leavedates) = 5, 1, 0)) AS may,
        SUM(IF(MONTH(leavedates) = 6, 1, 0)) AS june,
        SUM(IF(MONTH(leavedates) = 7, 1, 0)) AS july,
        SUM(IF(MONTH(leavedates) = 8, 1, 0)) AS august,
        SUM(IF(MONTH(leavedates) = 9, 1, 0)) AS september,
        SUM(IF(MONTH(leavedates) = 10, 1, 0)) AS october,
        SUM(IF(MONTH(leavedates) = 11, 1, 0)) AS november,
        SUM(IF(MONTH(leavedates) = 12, 1, 0)) AS december
FROM Leave_application a
LEFT OUTER JOIN Leave_dates b
ON a.leaveid = b.leaveid
GROUP BY a.userid

执行类似以下查询的操作:-

SELECT  la.`userid`,
        SUM(IF(MONTH(ld.`leavedates`) = 1, 1, 0)) as january,
        SUM(IF(MONTH(ld.`leavedates`) = 2, 1, 0)) as february,
        SUM(IF(MONTH(ld.`leavedates`) = 3, 1, 0)) as march,
        SUM(IF(MONTH(ld.`leavedates`) = 4, 1, 0)) as april,
        SUM(IF(MONTH(ld.`leavedates`) = 5, 1, 0)) as may,
        SUM(IF(MONTH(ld.`leavedates`) = 6, 1, 0)) as june,
        SUM(IF(MONTH(ld.`leavedates`) = 7, 1, 0)) as july,
        SUM(IF(MONTH(ld.`leavedates`) = 8, 1, 0)) as augest,
        SUM(IF(MONTH(ld.`leavedates`) = 9, 1, 0)) as september,
        SUM(IF(MONTH(ld.`leavedates`) = 10, 1, 0)) as october,
        SUM(IF(MONTH(ld.`leavedates`) = 11, 1, 0)) as november,
        SUM(IF(MONTH(ld.`leavedates`) = 12, 1, 0)) as december
      FROM `leave_application` as la
      LEFT JOIN `leave_dates` as ld
        ON (ld.`leaveid` = la.`leaveid`)
      GROUP BY ld.`leaveid`

你有什么企图?你要找的是一个简单的加入,从日期开始按月分组提取答案,这是一个问答网站,所以如果你真的问了一个问题,这不会有什么坏处。除了你的问题,你还可以分享你迄今为止的尝试!实际上,您的查询会有点复杂,而且您的表很难阅读。您可以尝试按用户ID分组,并计算每个月的12个离开日期。我用LEFT JOIN替换了LEFT OUTER JOIN,这很有效。ThanksLEFT OUTER JOIN只是左连接的完整语法。在每个月后添加逗号,并按用户ID分组。是的,我在每个月后都漏掉了逗号。但是为什么必须按用户ID分组呢?
SELECT a.userid,
        SUM(IF(MONTH(leavedates) = 1, 1, 0)) AS january,
        SUM(IF(MONTH(leavedates) = 2, 1, 0)) AS february,
        SUM(IF(MONTH(leavedates) = 3, 1, 0)) AS march,
        SUM(IF(MONTH(leavedates) = 4, 1, 0)) AS april,
        SUM(IF(MONTH(leavedates) = 5, 1, 0)) AS may,
        SUM(IF(MONTH(leavedates) = 6, 1, 0)) AS june,
        SUM(IF(MONTH(leavedates) = 7, 1, 0)) AS july,
        SUM(IF(MONTH(leavedates) = 8, 1, 0)) AS august,
        SUM(IF(MONTH(leavedates) = 9, 1, 0)) AS september,
        SUM(IF(MONTH(leavedates) = 10, 1, 0)) AS october,
        SUM(IF(MONTH(leavedates) = 11, 1, 0)) AS november,
        SUM(IF(MONTH(leavedates) = 12, 1, 0)) AS december
FROM Leave_application a
LEFT OUTER JOIN Leave_dates b
ON a.leaveid = b.leaveid
GROUP BY a.userid
SELECT  la.`userid`,
        SUM(IF(MONTH(ld.`leavedates`) = 1, 1, 0)) as january,
        SUM(IF(MONTH(ld.`leavedates`) = 2, 1, 0)) as february,
        SUM(IF(MONTH(ld.`leavedates`) = 3, 1, 0)) as march,
        SUM(IF(MONTH(ld.`leavedates`) = 4, 1, 0)) as april,
        SUM(IF(MONTH(ld.`leavedates`) = 5, 1, 0)) as may,
        SUM(IF(MONTH(ld.`leavedates`) = 6, 1, 0)) as june,
        SUM(IF(MONTH(ld.`leavedates`) = 7, 1, 0)) as july,
        SUM(IF(MONTH(ld.`leavedates`) = 8, 1, 0)) as augest,
        SUM(IF(MONTH(ld.`leavedates`) = 9, 1, 0)) as september,
        SUM(IF(MONTH(ld.`leavedates`) = 10, 1, 0)) as october,
        SUM(IF(MONTH(ld.`leavedates`) = 11, 1, 0)) as november,
        SUM(IF(MONTH(ld.`leavedates`) = 12, 1, 0)) as december
      FROM `leave_application` as la
      LEFT JOIN `leave_dates` as ld
        ON (ld.`leaveid` = la.`leaveid`)
      GROUP BY ld.`leaveid`