структура запроса - игнорирование записей для одного и того же события от нескольких пользователей? - PullRequest
0 голосов
/ 01 июня 2010

Одна таблица в моей базе данных MySQL отслеживает ход игры. Он имеет следующую структуру:

SCENARIO_VICTORIES
[ID]  [scenario_id]  [game]  [timestamp]  [user_id]  [winning_side]  [play_date]

ID - автоинкрементный первичный ключ. timestamp записывает момент подачи для записи. winning_side имеет одно из трех возможных значений: 1, 2 или 0 (означает ничью)

Один из запросов, выполненных в этой таблице, вычисляет процент побед для каждого сценария при просмотре страницы этого сценария. Выход выражается как:

  • Сторона 1 победа%
  • Победа 2-й стороны%
  • Ничья%

и запрашивается с помощью:

SELECT winning_side, COUNT(scenario_id)
FROM scenario_victories WHERE scenario_id='$scenID'
GROUP BY winning_side ORDER BY winning_side ASC

, а затем обрабатывается в процентах и ​​тому подобное.

Извините за долгую настройку. Моя проблема заключается в следующем: несколько моих пользователей играют друг с другом и записывают свои общие результаты. Таким образом, эти битвы вдвойне представлены в процентах побед и подсчете результатов. Хотя это случается нечасто, база пользователей невелика, и двойные записи оказывают заметное влияние на данные.

Учитывая приведенную выше таблицу и запрос - есть ли у кого-нибудь предложения, как мне «свернуть» записи с одинаковыми play_date & game & scenario_id & winning_side, чтобы они учитывались только один раз?

1 Ответ

1 голос
/ 01 июня 2010

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

Тем не менее, вы должны быть в состоянии выполнить DISTINCT внутренний запрос следующим образом:

SELECT winning_side, COUNT(scenario_id)
FROM (
    SELECT DISTINCT play_date, game, scenario_id, winning_side
    FROM scenario_victories 
    WHERE scenario_id = '$scenID'
) 
GROUP BY winning_side ORDER BY winning_side ASC
...