2014-11-21 4 views
0

Я пытаюсь заставить это работать навсегда сейчас, и я не могу заставить его работать. Мне нужно обновить столбец в моей таблице туров, если в таблице tours_reservations меньше 8 резервирований, когда тур на следующей неделе. У меня есть оператор select, который дает мне результат, который я хочу (тур, который нужно обновить), но я не знаю, как обработать этот результат в моей инструкции обновления. Вот мой выбор:SQL/PHP: результат обновления из запроса 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 или менее оговорками. Таблица туров имеет поле статуса, которое будет обновляться до «отменено». Как обработать это в запросе обновления? Любая помощь будет принята с благодарностью.

Заранее спасибо.

+0

Вам нужно получить результаты цикла в запросе выше и написать запрос на обновление в самом цикле. – cartina

+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)); 
} 

Также добавлена ​​привязка параметров.

Редактировать: есть более эффективные способы сделать это, не выполняя обновление в цикле.

+0

Большое спасибо! Это сделал трюк. Не может голосовать из-за отсутствия репутации, но +10000 для вас. –

Смежные вопросы