Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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选择datetime字段小于指定值的所有记录_Php_Mysql - Fatal编程技术网

Php mysql选择datetime字段小于指定值的所有记录

Php mysql选择datetime字段小于指定值的所有记录,php,mysql,Php,Mysql,因此,我尝试运行一个查询,在本例中,该查询将选择没有预约的客户,例如,2周的时间量为X。它归结起来就是给我看一份两周内没有预约的客户名单。我正试图用php解决这个问题,方法如下: $date = new DateTime; $ago = new DateInterval('P2W'); $target = $date->sub($ago); //query to select clients that aren't scheduled after the $target date $cli

因此,我尝试运行一个查询,在本例中,该查询将选择没有预约的客户,例如,2周的时间量为X。它归结起来就是给我看一份两周内没有预约的客户名单。我正试图用php解决这个问题,方法如下:

$date = new DateTime;
$ago = new DateInterval('P2W');
$target = $date->sub($ago);
//query to select clients that aren't scheduled after the $target date
$clients = ...;
SELECT * 
FROM clients_tbl 
INNER JOIN
(
    SELECT client_id 
    FROM appt_tbl 
    WHERE MAX(appt_date_time) < '2012-07-22' 
    GROUP BY client_id
) appts ON appts.client_id = clients_tbl.client_id;
涉及两个表,appt_tbl和clients_tbl。appt_tbl为每个约会记录存储一个客户id

所以本质上我需要的是为每个客户选择最大约会,如果它<我的$target日期,则将它们包括在查询结果中。我尝试过各种各样的查询,带子查询的查询,但是我在正确处理这个查询时遇到了困难

我当前的尝试类似于:

$date = new DateTime;
$ago = new DateInterval('P2W');
$target = $date->sub($ago);
//query to select clients that aren't scheduled after the $target date
$clients = ...;
SELECT * 
FROM clients_tbl 
INNER JOIN
(
    SELECT client_id 
    FROM appt_tbl 
    WHERE MAX(appt_date_time) < '2012-07-22' 
    GROUP BY client_id
) appts ON appts.client_id = clients_tbl.client_id;
这还应包括从未安排过的客户,即不会出现在appt_tbl中的客户,但不包括在未来两周内预约的客户

SELECT a.*
FROM clients_tbl a
LEFT JOIN appt_tbl b ON 
          a.client_id = b.client_id AND 
          b.appt_date_time >= CURDATE() - INTERVAL 2 WEEK 
WHERE b.client_id IS NULL
此查询在何处筛选之前首先执行的操作是选择所有客户机,无论他们是否有超过两周前的预定约会

如果客户端的约会时间不超过两周,则联接表中的值将为空。我们希望连接条件不满足的所有行,即连接表中的值为null,这是在b.client_id为null的情况下完成的

这还包括在结果集中根本没有任何相应约会的客户

不包括未来有预约的客户


也不需要在PHP中构造日期时间字符串。您可以直接在查询中执行此操作,尽管您可以将周数作为参数传入。

我认为这可能足够简单

select users from time_sheet where created_date >= date('2013-12-01');
对你来说,你必须这样做。 而不是这个

WHERE MAX(appt_date_time) < '2012-07-22' 
这样做

WHERE MAX(appt_date_time) < date('2012-07-22')
这样就可以进行日期比较,较早的是带有字符串比较的日期


干杯

哇,非常快@ZaneBien!那么,为了理解这个查询,这是否也会选择已经安排好的客户机,而不是在过去两周内?我之所以这样问,是因为where子句专门查找b.client_id为null…@Greg,没有。如果两周后有任何预约,则该客户不会被选中。这意味着将来有约会的客户也不会被选中。这会返回一个结果,尽管我不确定这是否是我所期望的。WHERE b.client\u id为NULL时,是否只选择从未出现在appt\u tbl中的客户端?也就是说,只有那些从未计划过的项目?@Greg,不,只有当我们忽略了第二个加入条件b.appt_date_time>=CURDATE-间隔2周时才会这样做。通过加入第二个加入条件,我们不仅可以选择从未安排过的客户,而且还可以选择预约时间不超过两周的客户。啊,清晰!谢谢你花时间解释。认可的!