我的道歉问什么必须要解决很简单,但我似乎无法总结我的脑海围绕这个..我甚至不能拿出我的问题一个非常合适的题目,请您赦免为该以及。
我有一个调查,其中每个用户可以张贴多个答案的问题,然后其他人对这些答案进行投票。 我需要在那里得到返回的所有用户的,投票最高的答案的结果。
测试案例:假设一个问题,如“什么是你最喜欢的歌的报价?”
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)