sql得到两次预订冲突

时间:2014-12-05 14:29:42

标签: mysql oop

我有一个sql预订问题。该表有idstylist,bdate,stime和etime。

基本上造型师一次只能做一份工作。因此,在预订时,我需要检查该造型师是否还在忙于另一个预订。这是我的冲突方法;

public function checkClash($bdate, $stime,$stylist){
    $query = sprintf("SELECT id FROM table WHERE (date=%s AND idstylist=%s) AND (%s BETWEEN stime AND etime)",

        $this->db->GetSQLValueString($bdate, "date"),
        $this->db->GetSQLValueString($stylist, "int"),
        $this->db->GetSQLValueString($stime, "text"));
        $result = $this->db->query($query);
         if($result  && $this->db->num_rows($result) > 0){
                return true;

        }
        return false;   

}

据我所知,我的查询是从(日期)中选择所有预订,其中idstylist为this,开始时间为> = $ stime但是< = $ stime。

例如,我在数据库中有一行看起来像这样;

id |日期| idstylist | stime | ETIME

1 | 2014-12-05 | 68 | 07:00:00 | 7时30分○○秒

现在我试图在同一天的07:10:00为同一个造型师预订,这应该会失败,但系统允许我进行预订。我无法看到我的查询有什么问题。

   //next check for clashes in the booking table
    $clash = $bookings->checkClash($_POST['bdate'],$_POST['stime'], $_POST['stylist']);
    if($clash==true){
        $errors[] = "Booking clashes.  Please try again";   
    }

1 个答案:

答案 0 :(得分:1)

这将变成调试会话。

从您的SQL :( stime> =%s AND etime< =%s)

替换为值:('7:00'> ='7:10'和'7:30'< ='7:10')

我猜你想要:(%s BETWEEN stime和etime)