Назначение номеров рангов строк - PullRequest
1 голос
/ 25 июня 2011

У меня есть база данных. Я хочу обновить столбец этого. Столбец должен содержать уникальные целые числа в порядке возрастания в соответствии с алфавитным порядком другого столбца.

Извините, не ясно, может быть, я хочу иметь такие целые числа, как это:

1 ACC 501
2 BCC 501
3 GCC 601
4 FCC 601

Есть ли достаточно простой способ установить этот ранг / порядок с помощью запросов mysql или sql?

Ответы [ 3 ]

3 голосов
/ 25 июня 2011

Вам нужна функция ранжирования, которая в данный момент не поддерживается MySQL. Однако вы можете смоделировать их так:

Set @rownum := 0;

Select rnk, SomeCode, SomeNum
From    (
        Select @rownum := @rownum + 1 As rnk, SomeCode, SomeNum
        From MyTable
        Order By SomeCode Asc
        ) As Z
1 голос
/ 25 июня 2011

Создайте другую таблицу, которая имеет ту же схему, что и исходная таблица, плюс новый столбец. Новый столбец должен быть автономным. Сделайте INSERT ... ВЫБЕРИТЕ в эту таблицу. Новый столбец будет заполнен желаемыми значениями.

0 голосов
/ 25 июня 2011

Как и то, что сказал Алекс, вы хотите создать новую таблицу, такую ​​как

CREATE TABLE newTable(
#Table definition from current table,
id INT NOT NULL AUTO_INCREMENT
);

А затем вставить с

INSERT INTO newTable
SELECT * FROM oldTable
ORDER BY orderColumn;

Я думаю, вы можете быстро создать таблицу с помощью

CREATE TABLE newTable LIKE oldTable;
ALTER TABLE newTable ADD COLUMN id INT NOT NULL AUTO_INCREMENT;
...