erhalten max von Tabelle, in Summe erforderlich

stimmen
-1

Angenommen, ich eine Tabelle mit folgenden Daten:

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

In diesem Beispiel ist das Spiel für 5 Fragen konfiguriert, aber ich bin für eine SQL - Anweisung suchen , die für arbeiten n Reihe von Fragen.

Was ich brauche, ist eine SQL-Anweisung, die eine Frage gegeben, displayOrder wird die aktuelle Schwierigkeitsgrad Frage zurückzukehren. Zum Beispiel - eine Displayorder von 3 gegeben, wobei die Tabelle oben Daten werden 2 zurück.

Kann mir jemand raten, wie die Abfrage aussehen sollte?

Veröffentlicht am 20/12/2009 um 17:32
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

m-Beziehung mit einer Frage Tisch: Ich würde einen Spieltisch mit einer 1 empfehlen.

Sie sollten nicht Spalten in einer Tabelle wiederholen - es verstößt gegen die erste Normalform.

Etwas wie das:

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;
Beantwortet am 20/12/2009 um 17:35
quelle vom benutzer

stimmen
0

Dinge vielleicht einfacher für Sie sein, wenn Sie Ihr Design ändern, wie duffymo schlägt vor, aber wenn man es auf diese Weise tun müssen, ist hier eine Abfrage, die den Trick tun sollten.

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
Beantwortet am 20/12/2009 um 17:44
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more