2011-03-01 3 views
0
SELECT america, 
     america_un, 
     game, 
     genre, 
     id, 
     platform, 
     url 
FROM `main-games` 
ORDER BY tally_rank 
LIMIT 3 

기본적으로 내 문제는 내가 시간이 tally_rank-의이 두 경기 (다른 데이터, 그냥 같은 이름)를 가질 수에 있다는 것입니다 사용할 수 없습니다 하나는 서로 떨어져서, 나에게 중복을 주었다. 본질적으로 내가하고 싶은 일은 게임 열을 구별 짓는 것입니다. 그래서 처음 만나는 것을 제외하고는 같은 이름의 다른 게임은 무시합니다.문제는 DISTINCT가

"game1, game2, game2, game3"이 있다면 첫 번째 게임 2를 원하고 두 번째 게임은 무시합니다.

내가 기억할 수있는 이래로 DISTINCT는 MySQL의 모든 것 또는 전혀 존재하지 않기 때문에 어떻게해야할지 모르겠습니다.

편집 : 나는 이것에 GROUP BY 게임을 사용했음을 유의해야하지만, 다른 모든 레코드 (2, 4 등)를 건너 뜁니다.

편집 2 :

Knight's Contract 
Fight Night Champion 
The Legend of Heroes: Trails in the Sky 
PopCap Hits! 
Killzone 3 

무엇 일어날 것은 내가 "게임에 의해 GROUP"를 제거하면 쿼리가 1/3/5를 잡은 것입니다 : 여기에 데이터베이스에 tally_rank하여 올바른 순서는 , 그것은 1/2/3을 움켜 잡는다. 왜 "GROUP BY 게임"이 레코드를 건너 뛰는 지 잘 모르겠습니다. DISTINCT 함께

SELECT field1,field2,field3,game FROM `main-games` GROUP BY game LIMIT 3; 

:

+0

하는 "game2"세트를? – bensiu

+0

실제 데이터 샘플을 게시 할 수 있습니까? 이 필드에 GROUP BY는 작동해야합니다 ... – Sergey

+0

DISTINCT를 사용하지 않고이 작업을 수행하려고합니까 ??? 세르게이가 말한대로 GROUP BY가 작동해야합니다. 제 이전 대답은 무시하십시오. 필요하지 않으면 삭제하겠습니다. –

답변

0

GROUP BY에 필드를 시도하지만 그룹 "전에"일부 정렬을 적용 (의미 - 게임에 의해 그룹, 그러나 저를 얻을 수 처음으로 동일한 게임의 각 그룹에서 게임), 내 생각 엔 당신이 내부 선택을 사용할 수 있다고 생각합니다 :

SELECT m.america, 
     m.america_un, 
     m.game, 
     m.genre, 
     m.id, 
     m.platform, 
     m.url 
FROM `main-games` m 
JOIN (SELECT game, 
     min(id) AS id 
     FROM `main-games` 
     ORDER BY tally_rank 
     GROUP BY game) as t 
ON m.game = t.game AND m.id = t.id 
ORDER BY m.tally_rank 
LIMIT 3 

내부 테이블에는 각 게임의 게임 이름과 최소 ID가 있습니다.이 테이블은 각 그룹의 첫 번째 게임을 알려줍니다. 외부 선택은이 ID를 사용하여이 특정 게임 레코드를 찾고 나머지 데이터를 가져옵니다.

+0

약간의 수정을했습니다 (편집 할 정도의 순위가없는 것 같습니다) 승/아웃 먼저 검토),하지만 이것은 예상대로 작동합니다.빠른 답장을 보내 주셔서 감사합니다. (오늘 밤까지이 질문을 확인할 수 없었기 때문에 uni 중간 시간에 바빴습니다.) :) –

0
DISTINCT없이

SELECT DISTINCT(game),field1,field2 FROM `main-games` ORDER BY tally_rank LIMIT 3; 
+0

MySQL에서 작동하지 않는 것 같습니다. \ – Sergey

+0

@jasdeep - "DISTINCT를 사용할 수 없습니다"- 어쩌면 중요합니다. – bensiu

+0

@bensiu :이 답변은 OP가 DISTINCT를 생각하는 이유를 피하는 것 같습니다 작동하지 않을 것이다. –

0

당신이 고유 또는 그룹 BY를 사용하지 못할 경우, 어쩌면이 시도 : 표시 할 기록의

SELECT america,   
america_un,   
game,   
genre,   
id,   
platform,   
url 
FROM `main-games` M1 LEFT JOIN `main-games` M2 
ON (M1.game = M2.game AND M1.id > M2.id) 
WHERE M2.id IS NULL 
ORDER BY tally_rank LIMIT 3