SQL / PHP:从选择查询更新结果

时间:2014-11-21 10:37:17

标签: php mysql codeigniter count having-clause

我一直在努力让这项工作永远存在,我似乎无法让它发挥作用。如果在下周的巡回演出中,tour_reservations表中的预订少于8次,我需要更新我的巡回表中的一列。我有一个select语句给我我想要的结果(需要更新的游览)但我不知道如何在我的更新语句中处理这个结果。这是我的选择陈述:

$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个或更少的活动。旅行表有一个状态字段,将更新为&#34;取消&#34;。如何在更新查询中处理此问题?任何帮助将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分: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));
}

还添加了参数绑定。

编辑:有更好的方法可以在不循环执行更新的情况下执行此操作。