SQL / PHP: обновление результата из выбранного запроса

Я пытался заставить это работать вечно, и, похоже, я не могу заставить его работать. Мне нужно обновить столбец в таблице туров, если для него в таблице tours_reservations меньше 8 бронирований, когда тур будет на следующей неделе. У меня есть оператор выбора, который дает мне желаемый результат (тур, который необходимо обновить), но я не знаю, как обработать этот результат в моем операторе обновления. Вот мой оператор выбора:

$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 или менее забронированными местами. В таблице туров есть поле статуса, которое будет обновлено до «отменено». Как мне обработать это в запросе на обновление? Любая помощь будет принята с благодарностью.

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


person J_vdv    schedule 21.11.2014    source источник
comment
Вам нужно зациклить результаты в приведенном выше запросе и написать запрос на обновление в самом цикле.   -  person cartina    schedule 21.11.2014
comment
Привет, как мне это сделать? Не могли бы вы указать мне правильное направление?   -  person J_vdv    schedule 21.11.2014


Ответы (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));
}

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

Изменить: есть лучшие способы сделать это, конечно, без выполнения обновления в цикле.

person turntwo    schedule 21.11.2014
comment
Большое спасибо! Это сработало. Не могу проголосовать из-за отсутствия репутации, но вам +10000. - person J_vdv; 21.11.2014