Лучший способ рассказать о 3 или более последовательных записях

Я реализую систему достижений. Один из «значков», которые я пытаюсь создать, определит:

  1. Если пользователь присоединился, по крайней мере, к одному вызову кодирования
  2. Затем он не присоединился к трем последовательным задачам кодирования
  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 для SELECT этого диапазона, не прибегая к некоторым PHP?

Запрос до сих пор

Я делаю 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)

Solutions Collecting From Web of "Лучший способ рассказать о 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

добавление группы может быть выполнено так, как вы хотите …