【问题标题】:GET AND JOIN two data from two different table for If conditions PHPGET AND JOIN 两个不同表中的两个数据用于 If 条件 PHP
【发布时间】:2014-06-24 20:08:52
【问题描述】:

我有两张桌子

表 A(来自某个表的视图):
从表 A 查询:

SELECT view_person_schedule., view_history_absen., TIMEDIFF(time_in,schedule_time_in) 迟到,TIMEDIFF(schedule_time_out,time_out) 加班 FROM person JOIN view_history_absen ON view_history_absen.ID = view_person_schedule.ID

表 A:

ID |日期 |时间_in |超时 |
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 |空|
1 | 2014-06-07 |空|
1 | 2014-06-08 |空|
1 | 2014-06-09 |空|
1 | 2014-06-11 |生病 |
1 | 2014-06-12 |生病 |
1 | 2014-06-13 |生病了|

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

ID |日期 |时间_in |超时 |
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 |空 | ........ |
1 | 2014-06-07 |空 | ........ |
1 | 2014-06-08 |空 | ........ |
1 | 2014-06-09 |空 | ........ |
1 | 2014-06-10 | ..... | ........ |
1 | 2014-06-11 |生病 | ........ |
1 | 2014-06-12 |生病 | ........ |
1 | 2014-06-13 |生病 | ........ |
1 | 2014-06-14 | ..... | ........ |

请任何人帮助我。

【问题讨论】:

  • 如果两个表在同一日期有一行会怎样?
  • Barmar,你能告诉我更多关于你的问题吗?
  • 如果Table ATable B 在同一日期有一行,结果应该是什么?只是一个表中的行(哪个?),还是两行?
  • 我会在表 B 上保留显示数据

标签: php database date


【解决方案1】:

假设两个表中没有重叠的日期,或者您希望结果中有两行,请使用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

【讨论】:

  • 但是,如果使用 select * 怎么办?不是特定领域。并且表 A 是从某些表中生成/结果的(作为视图)
  • 当您可以选择所需的特定字段时,为什么还要使用SELECT *
  • 当您合并具有不同列数的表中的数据时,使用SELECT * 没有意义。 UNION 中的两个子查询必须具有相同的列数。
  • Barmar,感谢您之前的关注,所以我使用特定的选定字段?但是,如果我有来自表 A 的上述查询呢?
  • 除非您正在合并具有非常相似架构的表。它们必须具有相同数量的列,并且列必须匹配。依赖它通常不是一个好主意,因为这意味着您在编写这样的应用程序后无法随时修改表。
猜你喜欢
  • 2017-12-22
  • 2011-07-24
  • 2023-03-17
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多