解決するのが非常に簡単でなければならないことを尋ねて申し訳ありませんが、これについて頭を悩ませることはできません..私の質問に本当にふさわしいタイトルを思いつくことさえできませんでした.それについてもご容赦ください. .
各ユーザーが質問に対して複数の回答を投稿し、他のユーザーがこれらの回答に投票できる投票があります。すべてのユーザーの最も投票数の多い回答が返される結果を取得する必要があります。
テスト ケース: 「あなたの最も好きな歌の引用は?」のような質問を想定してみましょう。
CREATE TABLE `answers` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`authorId` INT,
`answer` TEXT NOT NULL ,
`votes` INT NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO `answers` VALUES
(1, 30, "The West is the Best", 120),
(2, 30, "Come on, baby, light my fire", 100),
(3, 31, "Everything's gonna be allright", 350),
(4, 31, "Sayin' oooh, I love you", 350),
(5, 31, "Singing sweet songs of melodies pure and true", 290),
(6, 32, "I'm your pole and all you're wearing is your shoes", 540),
(7, 32, "And I'm crazier when I'm next to her", 180),
(8, 32, "You hear the music in the air", 230),
(9, 30, "You know they are a liar", 190)
私が期待する結果は次のとおりです。
id | authorId | answer | votes
6 | 32 | I'm your pole and all you're wearing is your shoes | 540
3 | 31 | Everything's gonna be allright | 350
9 | 30 | You know they are a liar | 190
基本的に、著者ごとに最良の回答を選択し、最良の回答が得られた投票数で結果を並べ替える必要があります。同じ著者による 2 つの回答が同じ投票数になる場合があります。次に、最初に投稿されたもの (低い ID) のみを選択する必要があります (回答 #3 と #4 で示されているように)。同じ著者による 2 つの異なる回答が結果に表示されることはありません。各著者は 1 回のみ当選します。
私は検索して検索し、再試行しましたが、現時点ではかなり洗脳されていると感じています..これは単一のSQLクエリでは実行できない可能性があります。その場合は、アプリケーションが PHP で作成されていることに注意してください。すべての答えを取得しORDER BY votes desc, id asc
て結果を反復処理し、すべてのauthorId
s を覚えて、authorId
既に見た . ...あまりにも多くの行を削除する場合など、オフセットを使用してクエリを再度実行する必要がある可能性があります..しかし、最終的には、単一クエリのソリューションが過度に複雑であるか、まったくない場合に最適なソリューションになる可能性があります...
何か案は?:o)