mySQL - таблица заказа по желанию перед столбцом добавления первичного ключа - PullRequest
0 голосов
/ 27 августа 2009

Использую следующие обозначения для добавления первичного ключа в таблицу:

ALTER TABLE tablename ADD id INT (11) NOT NULL AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ ПЕРВЫЙ

И это прекрасно работает, но, по-видимому, порядок таблицы по умолчанию равен исходному порядку ввода строк перед добавлением этого первичного ключа. И это не идеально для текущей ситуации.

Порядок этой таблицы важен, так как она представляет структуру меню, и мне нужно, чтобы таблица была упорядочена по parentId следующим образом, прежде чем первичный ключ будет добавлен в таблицу:

+ ------ + ---------- + ---------------------------
| id | parentId | ...
+ ------ + ---------- + ---------------------------
| 1 | 1 | ...
+ ------ + ---------- + ---------------------------
| 2 | 1 | ...
+ ------ + ---------- + ---------------------------
| 3 | 2 | ...
+ ------ + ---------- + ---------------------------
| 4 | 2 | ...
+ ------ + ---------- + ---------------------------
| 5 | 2 | ...
+ ------ + ---------- + ---------------------------
, , .

Так должна выглядеть таблица после добавления столбца первичного ключа "id", но в настоящее время я не могу упорядочить таблицу по parentId до добавления столбца id.

Я пробовал варианты вышеуказанного запроса, такие как:

ALTER TABLE tablename ADD id INT (11) NOT NULL AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ ПЕРВЫЙ ЗАКАЗ ПО parentId ASC

но безуспешно.

Есть предложения ??

Ответы [ 3 ]

3 голосов
/ 27 августа 2009

Столбец AUTO_INCREMENT не обязательно должен соответствовать какому-либо определенному порядку - это просто произвольные целые числа. Что произойдет в будущем, например, когда вы добавите новый элемент в меню? Он будет «принадлежать» в середине таблицы, но его значение AUTO_INCREMENT будет вновь назначенным значением, не зависящим от вашего текущего заказа.

Вместо того, чтобы беспокоиться о порядке значений AUTO_INCREMENT, просто примените правильное предложение ORDER BY при выборе данных из вашей таблицы:

SELECT *
FROM tablename
ORDER BY parentId ASC;

Даже с в столбце AUTO_INCREMENT необходимо применить предложение ORDER BY, чтобы обеспечить порядок результатов, поэтому вы могли бы также использовать тот, который имеет наиболее смысловой смысл.

1 голос
/ 27 августа 2009

Один из способов - создать новую таблицу с первичным ключом, а затем сделать INSERT INTO newTable SELECT * FROM oldTable ORDER BY parentID. Затем вы можете удалить старую таблицу и переименовать новую таблицу.

0 голосов
/ 27 августа 2009

Упорядочение по ParentId может не работать, поскольку в этом столбце есть дубликаты - например, как он узнает, по какой из строк 1 и 2 сортировать?

Не могли бы вы добавить еще один столбец, SortOrder и упорядочить по нему?

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