Я реализую систему достижений. Один из «значков», которые я пытаюсь создать, определит:
Значок просто называется «Я вернусь» 😉
Столы
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
добавление группы может быть выполнено так, как вы хотите …