Php MySQL从3个表中选择,并获取特定日期内所有成员的出勤时间
我有三张这样的桌子:Php MySQL从3个表中选择,并获取特定日期内所有成员的出勤时间,php,mysql,sql,Php,Mysql,Sql,我有三张这样的桌子: members_tbl id | Fullname | Email | MobileNo attendance_in_tbl id | member_id | DateTimeIN attendance_out_tbl id | member_id | DateTime_OUT 我想通过以下查询选择日期为2014-03-10的所有成员: SELECT attendance_in.EDatetime, members_info.mfullname, attendanc
members_tbl
id | Fullname | Email | MobileNo
attendance_in_tbl
id | member_id | DateTimeIN
attendance_out_tbl
id | member_id | DateTime_OUT
我想通过以下查询选择日期为2014-03-10的所有成员:
SELECT
attendance_in.EDatetime,
members_info.mfullname,
attendance_out.ODatetime
FROM
attendance_in
LEFT JOIN members_info ON members_info.id = attendance_in.MemID
LEFT JOIN attendance_out ON attendance_out.MemID = attendance_in.MemID
WHERE date(attendance_in.EDatetime) OR date(attendance_out.ODatetime) = "2014-03-10"
但是它在Attendac__out results中给了我不同的结果。您的查询有错误 你写道:
WHERE date(attendance_in.EDatetime) /* wrong! */
OR date(attendance_out.ODatetime) = "2014-03-10"
这是错误的,因为第一个表达式date(attention\u in.EDatetime)
的计算结果总是true
你可能想要
WHERE date(attendance_in.EDatetime) = "2014-03-10"
OR date(attendance_out.ODatetime) = "2014-03-10"
但是,当你的签到表和签到表变大时,它的表现肯定会很差,因为它必须扫描它们;它不能使用索引
您可能会发现,编写以下内容会更好:
WHERE (attendance_in.EDatetime >='2014-03-10' AND
attendance_in.EDatetime < '2014-03-10' + INTERVAL 1 DAY)
OR (attendance_out.EDatetime >='2014-03-10' AND
attendance_out.EDatetime < '2014-03-10' + INTERVAL 1 DAY)
地点(出席时间>='2014-03-10'和
出席人数_.EDatetime<'2014-03-10'+间隔1天)
或(出勤时间>='2014-03-10'和
出勤率_out.EDatetime<'2014-03-10'+间隔1天)
这将检查我们的签入和签出时间是否发生在所讨论的当天。这里是不同日期的结果复制结果,您具体需要查询什么?为您想要的结果添加一些摘要您需要为每个结果指定值,我的意思是你不能说
a或b=c
你需要说a=c或b=c
。此外,如果你需要输入日期和输出日期都是同一天,你应该将或更改为和
,否则只有其中一个是你想要的日期,你会得到重复的。我只需要从两个表中得到日期2014-03-10的结果。若你们在上面的图片中查看结果,你们会在结果中找到其他不同的日期!!但是由于出勤的结果。ODateTime不是同一日期。问题就在这里。请注意,在这张图中显示的是结果