[mysql] Перетасовать id в таблице

12
siv1987
На сайте с 02.04.2009
Offline
427
#11
Alexa1:
Сортировка по дате и id в обратном порядке (новые записи сверху).

ТС-у нужен не вывод, он хочет пересчитать само ид у поле.

dimidrol:
Задача - привести таблицу к новому виду без создания временной таблицы

Задача нереальная. Без временной таблицы не обойтись. Перекиньте туда значения ид, дропните столбец и создайте его заново, и пересчитайте из скрипта так, чтобы сохранить связь между новым и старым ид во временной таблицы. Потом по ней уже обновите зависимые ид остальных таблиц. Как видите процедура не самая простая, так что если нет острой необходимости лучше забейте.

J
На сайте с 18.07.2009
Offline
65
#12

или привести таблицу к такому виду

id ... num ... posted
большое_число_1 4 1000000
большое_число_2 6 1000001
большое_число_3 3 1000002

большое_чилсо - то число, которое явно больше последнего id в таблице. например

id ... num ... posted
50000001 4 1000000
50000002 6 1000001
50000003 3 1000002

а потом менять как хочешь, не боясь Duplicate entry

bsyomov
На сайте с 25.01.2012
Offline
31
#13

Если надо получить результат с сортировкой по нужному полю, сделать по нему индекс, и делать запросы с нужной сортировкой. Это не накладнее, чем выборка по id. Зачем вам id менять при этом? Всё же подумайте над постановкой задачи сначала, т.е. зачем вам менять id.

dimidrol
На сайте с 29.09.2005
Offline
191
#14
bsyomov:
Если надо получить результат с сортировкой по нужному полю, сделать по нему индекс, и делать запросы с нужной сортировкой. Это не накладнее, чем выборка по id. Зачем вам id менять при этом? Всё же подумайте над постановкой задачи сначала, т.е. зачем вам менять id.

уже подумал и иного варианта нет.

Иногда полезно проигрывать - это держит тебя в тонусе... Мне так рассказывали (с) Shark Покупаю сайты (стройка/отделка/стройматериалы) по адекватной цене. Предложения в личку. Траф - обязателен
siv1987
На сайте с 02.04.2009
Offline
427
#15

А вот еще в продолжение мысли, создаете в таблице новое поле, клонируете туда столбец ид, дропаете ид, создаете и обновляете сортируя его по клонированному полю. Сохраняется связь между новым ид - старым ид, дальше пересчитываете остальные таблицы.

edogs software
На сайте с 15.12.2005
Offline
775
#16

create table newt like oldt;

insert into newt (id,num,posted) select null, num,posted from oldt order by num;

И дальше просто переименовываете новую таблицу в старую.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий