Автоматизируйте поля MySQL (например, Excel) - PullRequest
0 голосов
/ 15 января 2010

Скажем, у меня есть таблица, такая как ID, NAME, SCORE. Теперь, обычно, чтобы получить рейтинг команд, я бы выбрал все и упорядочил. Хотя иногда я не хочу знать все рейтинги, а только рейтинг одной команды. Если я добавил столбец RANK, есть ли способ для MySQL автоматически заполнить эти значения для меня на основе SCORE? (Я считаю, что MS Excel имеет эту возможность)

и если да, то как он справляется со связями?

спасибо

Ответы [ 3 ]

2 голосов
/ 15 января 2010

Вы можете рассчитать рейтинг при выполнении запроса:

SELECT * FROM (
    SELECT teams.*, @rownum := @rownum + 1 AS rank
    FROM teams, (SELECT @rownum := 0) T1
    ORDER BY score DESC) T2
WHERE id = 1

Он работает, инициализируя переменную rownum равной 0, а затем перебирая строки в порядке убывания оценки.Для каждой команды значение rownum увеличивается, и команде присваивается ранг на основе текущего значения rownum.Внешний выбор применяет предложение where, так что возвращается только одна строка.

Вот улучшенная версия, которая присваивает одинаковый ранг командам, набравшим очки:

SELECT id, name, teams.score, rank FROM (
    SELECT score, @rownum := @rownum + 1 AS rank
    FROM (SELECT DISTINCT(score) FROM teams) T1, (SELECT @rownum := 0) T2
    ORDER BY score DESC) T3
JOIN teams ON T3.score = teams.score

Если это не такнедостаточно быстро, затем используйте триггер.

0 голосов
/ 15 января 2010

Получить Все Команды:

SELECT
    s1.name,
    s1.score,
    COUNT(s2.name) + 1 AS rank
FROM scores s1
LEFT OUTER JOIN scores AS s2 ON (s1.score < s2.score)
GROUP BY s1.name
ORDER BY COUNT(s2.name)

Получить Одна Команда («Кэнакс»):

SELECT
    s1.name,
    s1.score,
    COUNT(s2.name) + 1 AS rank
FROM scores s1
LEFT OUTER JOIN scores AS s2 ON (s1.score < s2.score)
GROUP BY s1.name
HAVING s1.name = 'The Canucks'
ORDER BY COUNT(s2.name)

Метод, показанный в приведенных выше примерах, получает ранжирование динамически ( не , заполняющий обычную или временную таблицу).

Примечание: оба из них предполагают, что данная команда существует только один раз в таблице результатов для правильного значения ранга.

0 голосов
/ 15 января 2010

похоже, что я ищу триггер MySQL

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