[英]mysql query to find rows with 5 or more consecutive records in a range
[英]Best way to tell 3 or more consecutive records missing
我正在实施一个成就系统。 我正在尝试创建的“徽章”之一将决定:
徽章简称为“我会回来”;-)
表格
users
==================
id fullname
1 Gary Green
challenge
==================================
id name start_date
1 challenge1 01-AUG-2010
2 challenge2 03-AUG-2010
3 challenge3 06-SEP-2010
4 challenge4 07-SEP-2010
5 challenge5 30-OCT-2010
6 challenge6 05-NOV-2010
entries
====================================================
id challengeid userid type code
1 1 1 1 -
2 2 1 1 -
3 6 1 1 -
4 6 1 2 -
条目表中的“类型”是指条目类型是基于非正则表达式的条目还是基于正则表达式的条目。 用户可以提交正则表达式和非正则表达式条目,因此挑战6的上述条目是有效的。
示例输出
这是我想要的查询的样式输出(在这种情况下应该授予徽章):
(for userid 1)
Challenge 1 --> Joined in
Challenge 2 --> Joined in
Challenge 3 --> NULL
Challenge 4 --> NULL
Challenge 5 --> NULL
Challenge 6 --> Joined in
怎么样?
这是我的问题
到目前为止的查询
我正在进行LEFT OUTER JOIN以加入挑战表和条目表(LEFT OUTER以确保保留用户未加入的挑战),然后按挑战start_date排序以查看用户是否尚未加入3或更多连续挑战。
SELECT challenge.id AS challenge_id, entries.id AS entry_id
FROM challenge_entries entries
LEFT OUTER JOIN challenge_details challenge
ON entries.challengeid = challenge.id
WHERE entries.userid = <user_id>
ORDER BY challenge.start_date
GROUP BY entries.challengeid
重要的编辑:要使这个徽章有意义,标准将需要连接3个或更多连续挑战,这些挑战被加入到了上面的示例输出中。 否则,任何第一次参加挑战的人都将自动收到徽章。 必须让用户远离参与挑战一段时间(> = 3)
我认为你需要使用另一个表开始......
SELECT challenge.id AS challenge_id, entries.id AS entry_id FROM challenge_details challenge
LEFT JOIN challenge_entries entries ON entries.challengeid = challenge.id and entries.userid = <user_id>
ORDER BY challenge.start_date
添加组可以按照您的意愿完成...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.