2010-03-08 2 views
4

사용자가 여러 사진을 가질 수있는 사진 테이블이 있습니다. Doctrine : SELECT MIN 하위 쿼리를 사용하여 UPDATE하는 방법?

나는 다음과 같은 쿼리를 만들려고 해요 :

$q = Doctrine_Query::create() 
    ->update('Photo p') 
    ->set('p.photo_type', 1) 
    ->where('p.user_id = ?', $id) 
    ->andWhere('p.date_added = (SELECT MIN(p.date_added) FROM Photo p WHERE p.user_id = ?)', $id) 

아이디어가 추가 된 최소 날짜 (초기 사진)가이 사용자의 특정 사진을 1로 "photo_type"을 설정하는 것입니다.

나는 구문을 올바르게 이해할 수없는 것 같습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

감사합니다.

편집 : 것 같다

나는이 질문 (MySQL Error 1093 - Can't specify target table for update in FROM clause)에 대한 답변에 따라, 할 수없는 일을 할 노력하고있어. 이 질문은 닫을 수 있습니다.

+0

가 수행 MIN 등의 집계 함수를 사용하는 경우? 또한 선택 테이블을 조인으로 변환하거나 테이블 변수 또는 해시 테이블을 사용하여 다시 작성할 수 있습니다 – CarneyCode

+0

먼저 WHERE 절 앞에 GROUP BY date_added를 넣으십시오. – CarneyCode

답변

2

이 시도 : 당신이 GROUP BY 필요하지

$q = Doctrine_Query::create() 
    ->update('Photo p') 
    ->set('p.photo_type', 1) 
    ->where('p.user_id = ?', $id) 
    ->orderBy('p.date_added', 'desc') 
    ->limit(1); 
+0

그래,이 작업은 ... ORDER BY ASC가되어야합니다. . DESC는 최대 (최신) 날짜부터 시작합니다. – Tom

+0

부끄러운 날, 나는 그 날을 보지 못했습니다 ... – Sergio