我正在构建一个预订系统,在该系统中,用户不能预订重叠的另一个预订。
提供了三个变量,开始日期、结束日期和产品ID。我需要检查拟议预订的开始日期和结束日期之间的间隔是否与旧预订重叠。
以前,我使用MySQL的BETWEEN
,但意识到只有当用户试图在现有预订中预订时,这才有效,然而,如果有人提前预订,比旧预订晚结束,那么它就会通过。
private
function is_available($product, $from, $end)
{
if (!$from || !$end) return false;
global $wpdb;
$table = $wpdb->prefix . "ovalbit_utils";
$sql = "SELECT * FROM $table WHERE booking=$product AND ('$from' between `start` and `end`) OR ('$end' between `start` and `end`)";
$rows = $wpdb->get_results($sql);
return ($rows == null) ? true : false;
}
有什么想法吗?
尝试添加第三个OR子句,如下所示:
$sql = "SELECT * FROM $table WHERE booking=$product AND (('$from' between `start` and `end`) OR ('$end' between `start` and `end`)) OR (('$from'<`start`) AND ('$end'>`end`)) ";
//尝试此查询
$sql="SELECT*FROM$table WHERE booking=$product AND((start
和end
之间的'$FROM')OR(start
和end
之间的'$send')";