Как я могу рассчитать последовательные элементы в базе данных, используя Rails? - PullRequest
1 голос
/ 02 августа 2010

Можно ли как-то запросить базу данных, чтобы она возвращала только те элементы, которые произошли последовательно (по времени) в соответствии с установленной переменной?

В частности, мне нужно выяснить, сколько раз пользователь выиграл игру подряд. Игры хранятся в базе данных с атрибутом win_loss (1 - победа, 0 - проигрыш).

Хотелось бы посмотреть, выиграл ли пользователь 3 игры подряд. Есть ли способ сделать это в базе данных?

Если нет, то как бы это выглядело в приложении?

Я заранее прошу прощения, если это сбивает с толку. Пожалуйста, задавайте вопросы, и я постараюсь прояснить это. Я использую Ruby on Rails.

1 Ответ

2 голосов
/ 02 августа 2010

Я бы выбрал другой подход. Я бы добавил в вашу модель пользователя столбец coecutive_wins (отрицательные числа могут представлять последовательные убытки, если вам это тоже нужно).

РЕДАКТИРОВАТЬ: если вам действительно нужно запросить его ...

Два запроса:

  1. выберите самую новую победу и самую новую потерю для данного пользователя (может быть сделано одним запросом в SQL SELECT max(created_at) AS newest, win_loss FROM games GROUP BY win_loss (я не могу вспомнить, как сейчас выполнять группирование функций в Rails, но вы должны понять)
  2. и затем относительно результата запроса (1):
    1. если найдены как самая новая победа, так и самая новая потеря, считайте игры с условием, что created_at > newest_win AND created_at > newest_lose
    2. если найден только последний выигрыш или проигрыш, пользователь всегда выигрывал или всегда проигрывал, просто посчитайте количество его игр
    3. в другом случае не было игр

Я рекомендую добавить колонку к пользовательской модели, будет лучше, когда вам нужно будет отобразить всю таблицу игроков и их последовательные победы / поражения.

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