2014-11-21 53 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