首页 > 解决方案 > 使用 MySQL 按日期和时间分别选择条目

问题描述

我有这个查询,它选择状态为待处理的每个约会。效果很好。此查询的问题它还将选择过去未决的约会。我只想显示那些今天在较晚的时间current_time或只是在较晚的日期。时间和日期在不同的列中。在下面的示例中,应仅返回第二行和第三行。我正在为您提供完整的查询,因为它现在正在我的应用程序中使用和工作。如何做到这一点?

user_schedule 表

id | customer_id | date            | time     | cleaning_status 
1  | 345         | 2020-06-09      | 08:00:00 | Pending
2  | 768         | 2020-06-09      | 19:00:00 | Pending
3  | 913         | 2020-06-11      | 07:00:00 | Pending

PHP

   if(!empty($_POST)){

    //variables
    $current_time ='16:00:00';
    $current_date ='2020-06-09';
    $my_city ='Miami';
    $sstatus_o = 'Pending';

    //query
    $data = $conn->prepare("select *,us.id as orderid,us.customer_id 
                            as ownerId from user_schedule us 
                            left join users u
                            on us.customer_id=u.id
                            LEFT JOIN user_avatar ua 
                            ON us.customer_id=ua.user_id 
                            and ua.last_update = (select 
                            max(last_update) 
                            from user_avatar ua1 where 
                            ua.user_id=ua1.user_id)
                            left join user_address uad
                            on us.customer_id=uad.user_id
                            where (uad.city LIKE ?) AND 
                            us.cleaning_status=? ORDER BY us.id DESC");
    $data->bind_param('ss',$my_city,$sstatus_o);
    $data->execute();
    $result_data = $data->get_result(); 

    }

标签: phpmysql

解决方案


您可以在查询中添加另一个约束,检查由您的datetime值形成的时间戳是否大于您的$current_date$current_time值,即

WHERE uad.city LIKE ?
  AND us.cleaning_status = ?
  AND TIMESTAMP(us.date, us.time) > TIMESTAMP(?, ?)

然后将$current_dateand$current_time变量添加到bind_paramie

$data->bind_param('ssss', $my_city, $sstatus_o, $current_date, $current_time);

推荐阅读