对于标题感到抱歉,我不确定如何描述这一点,这使得搜索解决方案变得更加困难。mysql查询:选择最新的地方,其他行不存在
我有有许多答案表:
CREATE TABLE `answers` (
`a_id` int(11) NOT NULL auto_increment,
`p_id` int(11) NOT NULL default '0',
`q_id` int(11) NOT NULL default '0',
`user_id` int(11) NOT NULL default '0',
`correct` int(1) NOT NULL default '0',
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`a_id`)
) ;
我需要从一个特定的user_id
和p_id
其中正确= 0 q_id
,但只有在更近的行从同一USER_ID和的p_id的correct
字段不是1
我可以按ID,但我不确定如何消除组,其中顶部正确!= 0
在此先感谢。我在这里找到了很多有用的答案,并期待着尽我所能提供帮助。
编辑:目前查询的看台上,但需要6秒来执行:
无论从你的答案我有查询工作,但需要6秒来执行!
SELECT a.q_id FROM answers a
JOIN (SELECT b.q_id, MAX(b.a_id) as a_id, b.correct
FROM answers b
WHERE b.correct = 1
AND b.user_id = 1
AND b.p_id = 22
GROUP BY b.q_id) c ON a.q_id = c.q_id
AND a.a_id > c.a_id
WHERE a.correct = 0
AND a.user_id = 1
AND a.p_id = 22
LIMIT 1
没有加入他们需要.26秒。和.45秒执行我怎样才能使它更有效率?
是否有另一种方法来选择最近的正确= 0行prev correct = 1行不存在?
感谢您的帮助!
看看我的答案,让我知道如果解决。 – Nirmal
@robr:那正确!= 1 /正确!= 0条件,以及这些记录之间的时间戳关系...... –
旧的行是否可以更新,并且假定它是最近的行? – Nirmal