Как сортировать строки в таблице и выбирать позиции строк? - PullRequest
1 голос
/ 19 января 2010

Рассмотрим следующую структуру таблицы:

id    name     rank    position
-------------------------------
1     Steve    5        0
2     David    3        0 
3     Helen    9        0 
4     Mark    15        0

Мне нужен быстрый алгоритм для оценки этих строк по столбцу rank и сохранения «позиции» каждой строки в поле position в реальном времени.

Теперь у меня есть жестокое решение:

SELECT * FROM table ORDER BY rank DESC

А затем получить результат в цикле и обновить каждую строку, заполняя столбец позиции. Но что, если бы у меня были тысячи записей? Как я могу оптимизировать это?

Ответы [ 2 ]

1 голос
/ 19 января 2010

Несколько дней назад я ответил на очень похожий вопрос, специфичный для MySQL:

Автоматизация полей MySQL (например, Excel)

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

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

Выберите один:

WITH t AS
(
SELECT 
  ROW_NUMBER() OVER (ORDER BY rank) as RowNum
  ,RANK() OVER (ORDER BY rank) as RankNum
  ,DENSE_RANK() OVER (ORDER BY rank) as DenseRankNum
  , * 
FROM table
)
UPDATE t set position = RankNum
--UPDATE t set position = RowNum
--UPDATE t set position = DenseRankNum
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...