2014-11-21 55 views
0

我一直试图让这个工作永远现在,我似乎无法得到它的工作。如果tour_reservations表中有少于8次预订,我需要在巡视表中更新一个列,当巡视下周时。我有一个select语句给了我想要的结果(需要更新的游览),但我不知道如何在更新语句中处理这个结果。这是我的选择声明:SQL/PHP:从选择查询更新结果

$date = new DateTime("+ $starting days"); 
    $day = $date->format('Y-m-d'); 

    $this->db->query("SELECT t.t_id, t.name, t.status, COUNT(r.reservation_id) AS c 
         FROM tours t 
         JOIN tours_reservations r ON t.t_id = r.tour_id 
         WHERE DAY = '$day' 
         GROUP BY t.t_id 
         HAVING COUNT(c) <=8"); 

用这个我得到所有事件,从现在开始7天,有8个或更少的保留。旅游观察表有一个状态栏,它将被更新为“取消”。如何在更新查询中处理此问题?任何帮助将不胜感激。

在此先感谢。

+0

您需要在上面的查询中循环结果并在循环中写入更新查询本身。 – cartina 2014-11-21 10:43:17

+0

嗨,我该怎么做呢?你能指出我正确的方向吗? – 2014-11-21 10:46:41

回答

1

假设您的初始查询是正确的。

$query = $this->db->query("SELECT t.t_id, t.name, t.status, COUNT(r.reservation_id) AS c 
         FROM tours t 
         JOIN tours_reservations r ON t.t_id = r.tour_id 
         WHERE DAY = ? 
         GROUP BY t.t_id 
         HAVING COUNT(c) <=8", array($day)); 

foreach ($query->result() as $row) 
{ 
    $this->db->query("UPDATE tours SET status = 'cancelled' WHERE t_id = ? ", array($row->t_id)); 
} 

还添加了参数绑定。

编辑:有没有更好的方法来做到这一点,而无需在循环中执行更新。

+0

非常感谢!这个伎俩。由于缺乏声誉而无法投票,但对你来说+10000。 – 2014-11-21 11:27:39