2014-11-21 12 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"); 

이렇게하면 8 일 이하 예약을 가진 7 일 후부터 시작되는 모든 이벤트가 발생합니다. 둘러보기 테이블에는 '취소됨'으로 업데이트되는 상태 입력란이 있습니다. 업데이트 쿼리에서 어떻게 처리합니까? 어떤 도움이라도 대단히 감사하겠습니다.

미리 감사드립니다.

+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입니다. –