Я пытался заставить это работать навсегда сейчас, и я не могу заставить его работать. Мне нужно обновить столбец в моей таблице туров, если в таблице 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 или менее бронирований. Таблица туров имеет поле статуса, которое будет обновлено до «отменено». Как мне обработать это в запросе на обновление? Любая помощь будет принята с благодарностью.
Заранее спасибо.
Предполагая, что ваш первоначальный запрос правильный.
$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));
}
Также добавлен параметр привязки.
Изменить: есть лучшие способы сделать это, конечно, без выполнения обновления в цикле.
Других решений пока нет …