2009-12-20 2 views
-1

가정하자 나는 다음과 같은 데이터가있는 테이블이 있습니다 게임 5 개 질문에 대해 구성된이 예에서GET 최대

gameId difficultyLevel numberOfQuestions 
-------------------------------------------- 
1   1     2 
1   2     2 
1   3     1 

을,하지만 작동하는 SQL 문을 찾고 있어요 n 몇개의 질문.

질문이 주어진 SQL 문은 displayOrder이 현재의 난이도 수준을 반환합니다. 예를 들어 위의 표 데이터를 사용하여 displayOrder가 3 인 경우 2를 반환합니다.

누구나 쿼리를 어떻게 표시해야합니까?

+0

질문을 명확히해야 할 필요가 있다고 생각합니다. displayOrder 3가 2를 반환하는 이유는 무엇입니까? displayOrder는 무엇을 의미합니까 (아마도 ORDER BY와 함께 ROW_NUMBER()를 사용하지만 순서는 무엇입니까?) 그리고 2는 어디에서 왔습니까? –

+0

시도해보고 명확하게하겠습니다 : DisplayOrser mean gameQuestionNumber. DisplayOrser는 3을 반환합니다. 적절한 난이도를 반환합니다. 레벨 2,이 경우에는 테이블 데이터에 따라 2 가지가 발생합니다. 난이도 1에서 2, 난이도에서 다음 2입니다. – erez

답변

0

일들이 당신을 위해 더 쉬울 수도 있지만, 당신이 그런 식으로 작업을 수행해야하는 경우, 여기에 트릭을해야 쿼리입니다.

SELECT MIN(difficultyLevel) as difficltyLevel 
FROM 
(
    SELECT difficltyLevel, (SELECT sum(numberOfQuestions) FROM yourtable sub WHERE sub.difficultyLevel <= yt.difficultyLevel) AS questionTotal 
    FROM yourTable yt 
) AS innerSQL 
WHERE innerSQL.questionTotal >= @displayOrder 
+0

당신의 솔루션을 시도했지만 얻은 : msg, 수준 16, 상태 1, 줄 3 'questionTotal'열 이름이 잘못되었습니다. – erez

+0

@erez 지금 시도하십시오. – dan

+0

Dan 올바른 값을 반환하지 않습니다. difficltyLevel은 @displayOrder 입력에 관련되어야합니다. 귀하의 쿼리는 2를 반환해야 할 때 1을 반환합니다. – erez

2

질문 테이블과 1 : m 관계의 게임 테이블을 권하고 싶습니다.

테이블에서 열을 반복해서는 안됩니다. 첫 번째 정규 양식을 위반합니다. 이 같은

뭔가 : duffymo에서 알 수 있듯이 당신이 당신의 디자인을 변경하는 경우

create table if not exists game 
( 
    game_id bigint not null auto_increment, 
    name varchar(64), 
    description varchar(64), 
    primary key (game_id)  
); 

create table if not exists question 
( 
    question_id bigint not null auto_increment, 
    text varchar(64), 
    difficulty int default 1, 
    game_id bigint, 
    primary key (question_id) , 
    foreign key game_id references game(game_id) 
); 

select 
game.game_id, name, description, question_id, text, difficulty 
game left join question 
on game.game_id = question.game_id 
order by question_id; 
+0

도움 주셔서 감사합니다. @duffymo. 나는 지금 디자인을 바꿀 수 없다. – erez