我的道歉問什麼必須要解決很簡單,但我似乎無法總結我的腦海圍繞這個..我甚至不能拿出一個真正適合的標題對於我的問題,請原諒你的赦免。如何讓不同的行與最大值
我有一個調查,其中每個用戶可以張貼多個答案的問題,然後其他人對這些答案進行投票。我需要得到一個結果,其中每個用戶的最高票數答案被返回。
測試用例:「什麼是你最喜歡的歌的報價」讓我們假設一個問題像
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
基本上我需要選擇每個作者的最佳答案,然後通過投票的最佳答案得到的結果進行排序。可能發生同一作者的兩個答案具有相同數量的選票;那麼應該只選擇第一張(較低的ID)(如回答#3和#4所示)。結果中可能不會出現同一作者的兩個不同答案 - 每個作者可能只贏一次。
我已經搜查,搜查,並試圖,並試圖再次和我覺得很洗腦的那一刻..這可能是因爲這不是一個單一的SQL查詢是可行的;應該是這樣,可能值得指出的是應用程序是用PHP編寫的。我知道我可以只抓住所有的答案與ORDER BY votes desc, id asc
,然後遍歷結果,記住所有的authorId
S和扔出去與authorId
我已經看過任何行,但我需要獲得的記錄一組號碼,這可能會變得尷尬(......如果我查出太多的行等,可能需要再次運行帶有偏移量的查詢)。但最終,如果單一查詢解決方案過於複雜或根本沒有,最終可能是最好的解決方案...
任何想法? :O)
+1包括樣本數據和預期結果。 –