Я внедряю систему достижений.Один из «значков», которые я пытаюсь создать, определит:
- Если пользователь присоединился хотя бы к одной задаче кодирования
- Затем не присоединился к 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
Как?
Вот мои вопросы
- Каков наилучший способ сделать это в запросе?
- Есть ли функция, которую я могу использовать в MySQL для выбора этого диапазона, не прибегая к какому-либо 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)