2015-01-20 4 views
0

나는 다음과 같은 MySQL의 쿼리 결과가 : 내가 원하는 것은mysql을 선택

+----+------------+-------------+ 
| id | title |  lang | 
+----+------------+-------------- 
| 1 | ola1  | 1   | 
| 1 | hello1  | 2   | 
| 1 | bonjour1 | 3   | 
| 2 | ola2  | 1   | 
| 2 | bonjour2 | 3   | 
| 3 | hello3  | 2   | 
| 4 | bonjour4 | 3   | 
+----+------------+-------------+ 

ID로 GROUP_BY 쿼리이며 그 질서와 각 ID의 제목을 내게 제공을 lang 필드에 대한 선호도. 예 :

결과 LANG 우선 순위 1, 2, 3 :

+----+------------+-------------+ 
| id | title |  lang | 
+----+------------+-------------- 
| 1 | ola1  | 1   | 
| 2 | ola2  | 1   | 
| 3 | hello3  | 2   | 
| 4 | bonjour4 | 3   | 
+----+------------+-------------+ 

결과 LANG 우선 순위 3, 2, 1 :

+----+------------+-------------+ 
| id | title |  lang | 
+----+------------+-------------- 
| 1 | bonjour1 | 3   | 
| 2 | bonjour2 | 3   | 
| 3 | hello3  | 2   | 
| 4 | bonjour4 | 3   | 
+----+------------+-------------+ 

감사합니다

+0

질문을 명확히하십시오. 왜 두 번째 결과 집합 예제에서 lang 값의 순서가 잘못 되었습니까 (3,3,2,3)? 그 논리를 생성 한 논리는 무엇입니까? lang ASC 또는 ORDER BY ORDER BY '... DESC'는 당신을 위해서입니까, 아니면 제가 빠진 것이 있습니까? 왜'GROUP BY'인가? –

+0

안녕하세요! 귀하의 답변에 감사드립니다. 내가 각 id에 대해 한 행을 원하기 때문에 그룹별로 말했고 이것은 키워드별로 그룹으로 수행됩니다. 그러나 lang 필드를 기반으로 선택할 행을 선택할 수 있기를 원합니다. 그래서 언어 1과 2, 그리고 3을 선호한다고 말할 수 있습니다. 각 id에 대해 lang = 1을 반환하려면 lang = 1을 선택하십시오. .. – user1126167

답변

0

그것은하지 내 SQL 기술에 함께 불가능하거나 또는 찾고있는 LANG 모든 행을 선택해야합니다 당신의 설명에서

하나의 쿼리에서이를 실행하십시오. (표 1 및 TEMPTABLE를 호출 할 필요가 임시 테이블은 테이블이라고 가정)

SELECT Table1.id, Min(Table1.lang) AS Min_Of_lang INTO tempTable FROM Table1 GROUP BY Table1.id ORDER BY Table1.id; 
SELECT Table1.* FROM tempTable INNER JOIN Table1 ON (tempTable.MinOflang = Table1.lang) AND (tempTable.id = Table1.id); 

첫 번째 명령은 새를 생성

이 : 난 항상이 문제에 대한 임시 템플릿과 두 개의 SQL 명령을 사용하여 결국 테이블 (존재하는 경우 현재 테이블보다 우선 함). 두 번째 명령은 첫 번째 테이블을 사용하여 원하는 결과 집합을 생성합니다.

첫 번째 원하는 결과 테이블에서 두 번째 원하는 결과 테이블로 변경하려면 첫 번째 쿼리에서 min 대신 Max를 사용하십시오.

다른 누군가가 내 것보다 더 훌륭한 해결책을 가지고 있습니다. 또한 임시 테이블을 삭제하기 위해 추가 SQL 문을 추가 할 수 있습니다.

+0

예 ... Unfortunaly 나는 하나의 쿼리도 불가능하다고 생각합니다 ... 나는 응용 프로그램 계층에서 행 선택을 할 것이라고 생각합니다. 고마워요! – user1126167

0

이것은 MySQL에서 정의되지 않은 기능입니다. 집계되지 않은 열에 표시된 값은 알 수 없습니다. read more here (MySQL Documentation).

(표준 SQL에서는 GROUP BY를 사용할 때 집계되지 않은 열을 포함 할 수 없습니다. 이유 중 하나입니다.) 당신이 원하는 무엇을, 당신은 간단하게 당신이

SELECT * FROM your_table WHERE lang = 1 
+0

답해 주셔서 감사합니다. 각 id에 대해 lang = 1을 갖게 될 것이기 때문에 이것은 작동하지 않을 것입니다. 이 경우 select는 lang에 대해 정의 된 기본 설정 순서에 따라 다른 언어를 반환하려고합니다. – user1126167