gpt4 book ai didi

php - 告诉丢失 3 个或更多连续记录的最佳方法

转载 作者:可可西里 更新时间:2023-11-01 07:42:51 25 4
gpt4 key购买 nike

我正在实现一个成就系统。我试图创建的“徽章”之一将确定:

  1. 如果用户参加了至少一次编码挑战
  2. 然后没有参加过连续 3 次编码挑战
  3. 然后又开始参与了。

徽章简称为“我会回来的”;-)

表格

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

怎么做?

这是我的问题

  1. 在查询中执行此操作的最佳方法是什么?
  2. 有没有我可以在 MySQL 中使用的函数来选择这个范围而无需借助某些 PHP?

到目前为止的查询

我正在做一个 LEFT OUTER JOIN 来加入挑战表和条目表(LEFT OUTER 以确保保留用户未加入的挑战),然后按挑战开始日期排序以查看用户是否未加入参加 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<br/>
LEFT JOIN challenge_entries entries ON entries.challengeid = challenge.id and entries.userid = <user_id><br/>
ORDER BY challenge.start_date

添加group by可以随心所欲...

关于php - 告诉丢失 3 个或更多连续记录的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com