Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL从3个表中选择,并获取特定日期内所有成员的出勤时间_Php_Mysql_Sql - Fatal编程技术网

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不是同一日期。问题就在这里。请注意,在这张图中显示的是结果