Порядок сортировки SQL Таблица - PullRequest
0 голосов
/ 31 марта 2020

У меня есть SQL Таблица со следующей информацией:

    CREATE TABLE `cities` (
  `city_id` int(11) NOT NULL,
  `city` varchar(50) NOT NULL,
  `state_id` int(11) NOT NULL,
  `is_default` int(1) DEFAULT '1',
  `is_active` int(1) NOT NULL DEFAULT '1',
  `sort_order` int(11) NOT NULL DEFAULT '9999',
  `lang` varchar(10) NOT NULL DEFAULT 'en',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

Проблема в том, что sort_order пуст ...

Как я могу отсортировать таблицу сначала в state_id -> затем в порядке город до Alphabeti c и заполните sort_order от 1 - *

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Если предположить MySQL 8.0, вы можете использовать row_number().

. Я бы на самом деле не сохранял эту производную информацию в самой таблице; при изменении данных может потребоваться перенумеровать множество строк.

Вместо этого вы можете вычислить эту информацию на лету, когда это необходимо, или использовать представление:

select c.*, row_number() over(order by state_id, city) sort_order
from cities c

В более ранних версиях вы можно добиться тех же результатов с переменными:

select c.*, (@rn := @rn + 1) sort_order
from cities c
cross join (select @rn := 1 rn) r
1 голос
/ 31 марта 2020

Вы можете использовать order by в update:

set @rn := 0

update cities
    set sort_order = (@rn := @rn + 1)
    order by state_id, city;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...