У меня есть таблица со многими строками, но они не работают. Я использую поле "идентификатор" в качестве первичного ключа. У меня также есть поле "даты", которое является полем даты и времени.
Как я мог повторно индексировать таблицу так, чтобы записи были id'd в хронологическом порядке согласно полю даты
Как бы я мог это сделать, это создать новую таблицу с автоматическим приростом Индекс и просто выберите весь свой старый стол в нее заказа по дате. Затем вы можете удалить свой старый стол.
Почему вы хотите, чтобы последовательность IDS коррелирует с датами? Похоже, вы хотите сделать порядок по идентификатору
, и у строк вернутся в порядке даты. Если вы хотите строки в порядке даты, просто используйте порядок по дате
вместо этого.
Значения в столбце ID AUTOINCREMENT должны рассматриваться как произвольные. Полагаясь на ваши идентификаторы, находящиеся в дате порядок, это плохое представление.
Следующий фрагмент SQL должен делать то, что вы хотите.
ALTER TABLE test_table ADD COLUMN id2 int unsigned not null;
SET @a:=0;
UPDATE test_table SET id2=@a:=@a+1 ORDER BY `date`;
ALTER TABLE test_table DROP id;
ALTER TABLE test_table CHANGE id2 id int UNSIGNED NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (id);
Имейте в виду, что вы никогда не можете гарантировать порядок автоматически прикрепленного столбца, как только вы начнете вставлять и удалять данные, поэтому вы не должны опираться на любой заказ, за исключением того, что вы указываете, используя заказа
В ваших запросах. Это дорогая операция, которую вы делаете, поскольку она требует полностью повторной созданной индексы, поэтому я бы не предложил бы сделать это часто.
Вы можете использовать ALTER TABLE T order CoL; Разрешенный синтаксис порядка как в выборах.