我正在实施一项成就系统。我试图创建的“徽章”之一将决定:
徽章简称为“我会回来”; - )
表格
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排序以查看用户是否未加入连续三次或更多次挑战。
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个或更多连续挑战,这些挑战被加入了,例如上面的示例输出。否则,任何第一次参加挑战的人都将自动收到徽章。必须让用户远离参与挑战一段时间(&gt; = 3)
答案 0 :(得分:1)
我认为你需要使用另一张桌子来开始......
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
添加组可以按照您的意愿完成...