2012-10-25 4 views
1

이벤트 모듈이 설치된 Drupal 설치가 있습니다. 끝 날짜가 지나가고 살지 않는 모든 이벤트를 검색하는 짧은 플러그인을 작성했습니다. MySQL 테이블 업데이트 중 최대 값 쿼리 만

UPDATE node LEFT JOIN content_field_dates on node.nid = content_field_dates.nid SET node.status = 0 WHERE node.type = 'event' AND field_dates_value2 < NOW() AND node.status = 1 

그러나, 일부 이벤트는 여러 날짜를 가질 수 있으며,이 쿼리는 하나의 날짜가 지난 경우에도 0으로 상태를 설정하고 일부 날짜는 미래에 여전히 : 그것은 SQL 쿼리과 같이 기본적입니다. 난 단지 지금처럼 MAX() 날짜를 조회하는 SELECT 쿼리를 수행하기 위해 관리했습니다 :

SELECT * FROM node LEFT JOIN content_field_dates on node.nid = content_field_dates.nid WHERE node.type = 'event' AND field_dates_value2 < NOW() GROUP BY field_dates_value2 HAVING field_dates_value2 = MAX(field_dates_value2) 

하지만 난 GROUP BY를 사용할 수 없기 때문에 이것이 UPDATE 쿼리에 번역 얼마나 아무 생각이 없습니다. 어떤 아이디어?

답변

1

max을 인라인보기에 넣은 다음 그와 조인 할 수 있습니다. content_field_dates 테이블에 술어가 있으므로 LEFT JOIN을 수행하면 아무 것도 얻을 수 없습니다.

어쨌든,이 잘하면 당신이 원하는 걸 얻을해야 작동하는 것 같다

UPDATE node n 
join (
select nid,max(field_dates_value2) as maxDate 
from content_field_dates 
group by nid 
) t on n.nid = t.nid 
SET n.status = 0 
where t.maxDate < now() and n.status = 1; 
+0

합니다. 감사! :) – Pezholio