选择表中的行,其中日期介于同一表中另一行的2个日期之间

时间:2018-05-18 17:05:26

标签: php mysql wordpress

我想在我的表中选择某一行,其中日期在同一个表中另一行的开始日期和结束日期之间。 我的桌子是这样的。

============================================================================================
id         newid             start                 end                    date
-------------------------------------------------------------------------------------------
1             -            25/01/2018           26/02/2018            25/01/2018 
2            1            27/01/2018           27/01/2018            27/01/2018
3            1            05/02/2018           05/02/2018            05/02/2018
4            1            27/02/2018           27/02/2018            27/02/2018
============================================================================================

我创建了通过id

调用结果的函数
function get($id){
global $wpdb;
$table_name = $wpdb->prefix ."myTable";
$sql = $wpdb->get_results("SELECT * FROM  $table_name WHERE id='{$id}'");
return $sql;
}

我希望$sql$id开始日期和结束日期之间返回结果 通过使用mysql而不是php。

1 个答案:

答案 0 :(得分:0)

您可以使用以下SELECT

SELECT * 
FROM table_name t1 
WHERE EXISTS (
    SELECT * 
    FROM table_name t2 
    WHERE t1.date >= t2.start 
        AND t1.date <= t2.end 
        AND t1.id <> t2.id
)
  

演示: http://sqlfiddle.com/#!9/b197a4/4/1

现在您可以使用以下PHP函数(get):

function get($id) {
    global $wpdb;
    $table_name = $wpdb->prefix ."myTable";
    $sql = $wpdb->get_results("SELECT * FROM $table_name t1 WHERE id = '$id' AND EXISTS (SELECT * FROM $table_name t2 WHERE t1.`date` >= t2.`start` AND t1.`date` <= t2.`end` AND t1.`id` <> t2.`id`)");
    return $sql;
}