Для выполнения операций над сортировкой в базе данных, необходимо дополнительное поле,
к примеру ID, ORDER – два первичных ключевых поля для системных целей.
теперь можно выполнять примерно такие запросы:
update nc_directory
set order = 1
where id = 2;
update nc_directory
set order = 2
where id = 1;
или
выбрать две записи select id, sort from tbl limit 2 order by id
update tbl set sort=key2 where id=id1;
update tbl set sort=key1 where id=id2;
где
id integer unsigned NOT NULL auto_increment
это два запроса меняют местами две записи.
то есть изменяется только поле ORDER не трогая ID.
и при выводе записей результат сортировать по полю ORDER.
можно еще использовать не использующийся ID=-1
update table set id=-1 where id=233
update table set id=233 where id=234
update table set id=234 where id=-1
update peoples
set значение=
(select distinct o1.значение from peoples o1
where peoples.фамилия=o1.фамилия and peoples.значение<>o1.значение)
where фамилия in
(select distinct o2.фамилия from peoples o2
group by o2.фамилия having count(o2.фамилия)=2)
Чтобы перенумеровать поле id, нужно 2 sql-запроса:
set @n=0;
update `table` set `id`=(select @n:=@n+1) order by `id`;
При запуске из PHP:
mysql_query("set @n=0");
mysql_query("update `table` set `id`=(select @n:=@n+1) order by `id`");
здесь справка по механизмам оптимизации mysql
Комментарии
Отправить комментарий