MSQL / MARIADB: как сбросить идентификатор по возрастанию другого столбца - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть таблица с 4 столбцами ID, PLZ (немецкие почтовые индексы), long и lat

CREATE TABLE `table` (
    `ID` INT(5) UNSIGNED NULL,
    `PLZ` INT(5) UNSIGNED NULL,
    `lat` INT(5) UNSIGNED NULL,
    `long` INT(5) UNSIGNED NULL
)
COLLATE='utf8'

, когда я добавляю почтовый индекс с INSERT, новый почтовый индекс будет добавлен вконец таблицы с наибольшим идентификатором.

enter image description here

Это разрушает порядок возрастания почтовых индексов PLZ.
Я хотел быТеперь нужно изменить порядок идентификаторов на основе возрастающих почтовых индексов PLZ.

enter image description here

Это должна быть одна команда для MySQL .
Какой самый лучший способ?

PS Я могу сделать это:

SELECT RANK() Over (ORDER BY plz) As id , plz, long, lat FROM `table`;

enter image description here

Таким образом, я создаю виртуальную колонку.И каждый раз, когда мне нужен этот столбец, я должен выполнить этот запрос.Я хочу сохранить результат запроса в столбце, даже если я создаю новый, такой как «idsorted», без проблем.

Но тогда возникает вопрос по-другому: «Как я могу теперь обновить свойреальный столбец "idnew" с новым столбцом идентификатора? "

Я прошу команду mysql.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Неправильный подход.

Если PLZ уникален, в id нет необходимости.Избавьтесь от столбца id и сделайте PLZ PRIMARY KEY.Тогда ваша проблема исчезнет.И твой стол меньше.И некоторые запросы выполняются быстрее.Win-win-win.

Кроме того, выход SELECT имеет без порядка , если вы не укажете ORDER BY.Вам все равно понадобится ORDER BY PLZ даже после смены PK.

(добавлено)

Если PLZ не уникален, то сохраните id, но сделайте не зависит от значений идентификатора в любом конкретном порядке, и do используйте ORDER BY, чтобы получить вывод в нужном порядке.

(больше)

OK,PLZ не уникален.Если вы хотите увидеть весь список, упорядоченный по PLZ, то попросите сделать следующее:

 ORDER BY PLZ

Или, чтобы иметь согласованный порядок в каждом почтовом индексе,

 ORDER BY PLZ, ID

Если естьэто какой-то другой «порядок», который вам нужен, затем есть столбец (или столбцы), которые определяют порядок.Не стесняйтесь с ID.

0 голосов
/ 01 декабря 2018

Если я правильно понял, вам следует изменить порядок сортировки индекса вашего индекса на возрастающий.

например:

CREATE TABLE t (
ID INT,
PLZ INT,
Long [your type] ,
Lat [your type],
INDEX ID_asc (ID ASC)

);

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