Лучший способ сказать, что 3 или более последовательных записей отсутствуют - PullRequest
4 голосов
/ 10 ноября 2010

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

  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, чтобы убедиться, что сохраняются вызовы, к которым пользователь не присоединился), затемСортировать по запросу 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)

1 Ответ

1 голос
/ 10 ноября 2010

Я думаю, вам нужно использовать другую таблицу, чтобы начать с ...

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...