2012-07-24 95 views
2

得到的条目我有这样的一个表:由Max日期

CREATE TABLE IF NOT EXISTS `answered` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `question_id` int(11) NOT NULL, 
    `correct` tinyint(1) NOT NULL DEFAULT '0', 
    `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE IF NOT EXISTS `questions` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `created` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`) 
); 

,我需要选择正确的和不正确的答案的数量,但如果同样的问题,得到了多个答案( “回答”中可能会有更多的条目与相同的问题ID)只有最新的(由“回答。创建”决定)应包括在内。

结果结构应该是这样的:

correct count 
    0  1 
    1  3 

小提琴: http://sqlfiddle.com/#!2/11073

我的审判:

SELECT a.correct, count(*) as count 
FROM answered a 
JOIN questions q ON a.question_id = q.id 
GROUP BY correct 

这个工作,但不止一次数相同question_ids。

回答

-1

我相信如果没有光标,就没有办法做到这一点,因为如果你想评估每个问题是否有零个或多个答案,并且如果它有多个答案你想要得到最新的答案,这意味着你想在每个Question_id上进行交互。

看看这个代码: http://dev.mysql.com/doc/refman/5.0/en/cursors.html

并为每个问题ID您检查最新的答案正确与否,比你在正确和错误变量添加。

0

试试这个:

SELECT Correct, count(*) as count 
FROM questions q 
JOIN (select question_id, max(created) as 'MaxCreated' from answered group by question_id) a 
ON a.question_id = q.id 
JOIN answered t1 on a.question_id = t1.question_id and a.MaxCreated = t1.Created 
GROUP BY correct 

也许有更好的选择(我不喜欢日期的加盟,如果重复了日期?),但我认为它会给你想要的东西(我的意思,如果你想要最大日期,你不应该有重复的日期)