2017-02-13 9 views

ответ

0

В реляционной базе данных, такой как MySQL, нет особого порядка, присущего таблице. Вы должны сортировать по отдельным столбцам при получении информации, если порядок важен для вас (например, по алфавиту по фамилии или по номеру заказа). Помимо этого, MySQL, как правило, обнаруживает информацию в том порядке, в котором она была вставлена, но полагаться на это может вызвать проблемы (например, переупорядочивание при отсутствии строки во время вставки или удаление элемента).

Таким образом, правильное решение действительно сортировать по некоторым надежным средствам (возможно, столбцу «sort_order» INT или метке времени для последнего времени модификации), но единственным обходным путем для этого было бы вручную (или программно) перемещать каждое значение один на один. Вы можете сделать это напрямую с SQL, хотя вам нужно быть осторожным, чтобы не менять слишком много значений. Сначала убедитесь, что у вас есть резервная копия.

Как только у вас есть резервная копия таблицы, вам нужна другая копия таблицы. В этом примере у меня есть «сортировщик» и «сортировщик2», которые идентичны и имеют два столбца; 'id' и 'val'.

UPDATE sorter, sorter2 
SET sorter.val = sorter2.val 
WHERE sorter.id = sorter2.id +1 AND sorter.id > 15 

Это может быть расширена за счет включения более столбцов и, конечно, и заявление должно быть приспособлено, чтобы соответствовать какой строке вы вставляя новые данные. Самый простой способ использовать это - добавить еще одну строку в конец (которая может быть пустой или содержать данные мусора, поскольку вторая-последняя строка вскоре заменит ее), затем запустите SQL, который будет перемещать все до одного, оставляя вам дублированное пространство в любой строке, соответствующей вашей инструкции AND, чтобы вы вручную вставляли недостающую информацию.

Но опять же, я рекомендую использовать лучшее средство сортировки, если заказ важен для вас.