Php mysql选择datetime字段小于指定值的所有记录
因此,我尝试运行一个查询,在本例中,该查询将选择没有预约的客户,例如,2周的时间量为X。它归结起来就是给我看一份两周内没有预约的客户名单。我正试图用php解决这个问题,方法如下: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
$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周时才会这样做。通过加入第二个加入条件,我们不仅可以选择从未安排过的客户,而且还可以选择预约时间不超过两周的客户。啊,清晰!谢谢你花时间解释。认可的!