2014-04-18 5 views
0

는 이제 가정하자 같은 값 만 첫 번째 행을 선택합니다 (ID, subject_id)이 표에서 나는 다음과 같은 한 기록 :YII 액티브 : 나는 다음 표를 가지고,

 
id: 1, subject_id: 1 
id: 2, subject_id: 1 
id: 3, subject_id: 2 
id: 4, subject_id: 1 
id: 5, subject_id: 2 

어떻게에만 얻을 수 있습니다 여기서 첫 번째 행 subject_id = 1 및 제 행 여기서 subject_id = 2 :

답변

0

 
id: 1, subject_id: 1 
id: 3, subject_id: 2 
가 페치 될에만 제 레코드 그룹화를 이용하고있다.

+0

이것은 잘못된 것입니다. 생성 된 SQL에는 집계 함수가 없으므로 결과가 불확실합니다. 결과는 완전히 우연이며 신뢰할 수 없습니다. 제 설명을 읽으십시오. – nazim

0
select * from (select id,subject_id FROM table group by subject_id)tempalias where subject_id=1 

select * from (select id,subject_id FROM table group by subject_id)tempalias where subject_id=2 
+0

. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. –

+0

나는 이것이 그가 무엇을 찾고 있다고 생각한다. 그는 주어진 결과를 얻기 위해 질의를 찾고 있는데 나는 그 질의를 게시했다. 하위 쿼리를 배우기 위해 링크를 주어야한다는 뜻인가요? @ Michael Roland –

+0

나는 이것을 두 가지 이유로 들었다 : (1) 해답이 설명 없이는 매우 열악하다. (2) OP는 Yii ActiveRecord를 특별히 요구했기 때문에 OP가 두 개의 일반 SQL 쿼리가 아닌 추상화를 사용하여이를 수행 할 수있는 방법을 설명하는 답변을 기대했을 것입니다. –

0

제안하는 해결책은 기준에서 집계 함수로 min (id)을 사용하는 것입니다. [id는 자동 증가 또는 수동으로 증가한다고 가정합니다.]

$criteria = new CDbCriteria(); 
$criteria->select = "min(id), subject_id"; 
$criteria->group = "subject_id"; 
$models = ModelName::model()->findAll($criteria); 

첫 번째 행을 가져 오기위한 sql 함수 (MySQL DB라고 가정)는 없습니다. 최신 MySQL 설명서에서 Group by functions을 확인하십시오.

CDbCriteria's group property은 기본 SQL 엔진 group by 기능과 정확하게 관련이 있습니다. 그리고 명시 적 집계 함수가 제공되지 않은 경우 no default aggregate function이 있습니다. MySQL은 당신이 group by 절에 포함되지 않은 컬럼을 선택하기 위해서는 illegal이라고 말합니다. [그것은 해당 컬럼에 집계 함수를 넣지 않았습니다].

MySQL 문서에서는 group by 절에 포함되지 않은 [집계 함수 없음] 열을 선택하면 결과가 indeterminate이됩니다. 이 SO뿐만 아니라 질문

확인 :이 질문에 대한 답변을 제공하지 않습니다 GROUP BY behavior when no aggregate functions are present in the SELECT clause

관련 문제