从两个不同的表中获取并加入两个数据,用于If条件PHP

时间:2014-06-24 20:08:52

标签: php database date

我有两张桌子

表A(从某个表中得到一个视图):
从表A查询:

  

SELECT view_person_schedule。,view_history_absen。,TIMEDIFF(time_in,schedule_time_in)AS迟到,TIMEDIFF(schedule_time_out,time_out)为超时人员JOIN view_history_absen ON view_history_absen.ID = view_person_schedule.ID

表A:

  

ID |日期| time_in | time_out |
  1 | 2014-06-01 | 07:00 | ........ |
  1 | 2014-06-02 | 08:00 | ........ |
  1 | 2014-06-03 | 08:10 | ........ |
  1 | 2014-06-04 | ..... | ........ |
  1 | 2014-06-05 | ..... | ........ |
  1 | 2014-06-10 | ..... | ........ |
  1 | 2014-06-14 | ..... | ........ |

表B:

  

ID | dates_exc |信息|
  1 | 2014-06-06 | NULL |
  1 | 2014-06-07 | NULL |
  1 | 2014-06-08 | NULL |
  1 | 2014-06-09 | NULL |
  1 | 2014-06-11 | SICK |
  1 | 2014-06-12 | SICK |
  1 | 2014-06-13 | SICK |

我的问题是:如何使结果数据如下所示:

  

ID |日期| time_in | time_out |
  1 | 2014-06-01 | 07:00 | ........ |
  1 | 2014-06-02 | 08:00 | ........ |
  1 | 2014-06-03 | 08:10 | ........ |
  1 | 2014-06-04 | ..... | ........ |
  1 | 2014-06-05 | ..... | ........ |
  1 | 2014-06-06 | NULL | ........ |
  1 | 2014-06-07 | NULL | ........ |
  1 | 2014-06-08 | NULL | ........ |
  1 | 2014-06-09 | NULL | ........ |
  1 | 2014-06-10 | ..... | ........ |
  1 | 2014-06-11 | SICK | ........ |
  1 | 2014-06-12 | SICK | ........ |
  1 | 2014-06-13 | SICK | ........ |
  1 | 2014-06-14 | ..... | ........ |

请有人帮助我。

1 个答案:

答案 0 :(得分:0)

假设两个表中没有重叠日期,或者您希望结果中有两行,请使用UNION

SELECT id, dates, time_in, time_out
FROM TableA
UNION
SELECT id, dates_exc, information, NULL
FROM TableB

如果表B在重叠时优先:

SELECT dates.id, dates.dates, IFNULL(b.information, a.time_in) AS time_in, a.time_out
FROM (SELECT id, dates
      FROM tableA
      UNION DISTINCT
      SELECT id, dates
      FROM tableB) AS dates
LEFT JOIN tableB AS b ON dates.id = b.id AND dates.dates = b.dates
LEFT JOIN tableA AS a ON dates.id = a.id AND dates.dates = a.dates