Как поменять местами строки в таблице?

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

qwertyuiop
Сообщения: 77
Зарегистрирован: 24 мар 2005, 11:00

Требуется физически поменять местами две строки... Как это сделать и возможно ли это в mysql?

Структура таблицы:
-- --------------------------------------------------------

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `gallery` (
  `id` int(10) unsigned NOT NULL,
  `file_name` varchar(100) NOT NULL,
  `file_width_thumb` varchar(5) NOT NULL,
  `file_height_thumb` varchar(5) NOT NULL,
  `picture_theme` varchar(10) NOT NULL,
  `picture_name` varchar(30) NOT NULL,
  `picture_info` tinytext,
  `picture_describe` text,
  `picture_size` char(9) NOT NULL,
  `picture_year` year(4) NOT NULL,
  `picture_lyric` text,
  `picture_added` varchar(19) NOT NULL,
  `picture_modified` varchar(19) default NULL,
  `sort` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Нужно что-то типа ALTER TABLE `gallery` ORDER BY RAND() , но только с конкретными строками!

Заранее спасибо!
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

а смысл?
для определённого порядка существует ORDER BY в запросе. Если очень хочется чтобы всё шло по порядку ID но где-то накосячилось - можно ID поменять, ы?
Изображение
qwertyuiop
Сообщения: 77
Зарегистрирован: 24 мар 2005, 11:00

Напрашивается два вопроса:
1. Каким образом это реализовать с помощью ORDER BY?
2. И как можно поменять ID?

Смысл в том,чтобы картинка под ID=7 встала на место картинки под ID 37,которая идёт сразу же за картинкой ID=7 )))
Запутал? То-то же...
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Заводишь доп. поле id или pos, неважно как назвать и выводишь картинки согласно нумерации в этом поле, естественно нумерацию придёться сдвигать при изменении позиции. Двигать записи не интересно слишком большой объём работы (хотя можно и так).
qwertyuiop
Сообщения: 77
Зарегистрирован: 24 мар 2005, 11:00

Спасибо за помощь! Да... Видимо без дополнительного поля не обойтись!
Двигать записи не интересно слишком большой объём работы (хотя можно и так).
Но в идеале хотелось бы одной командой и напрямую в самой таблице их поменять!
А есть способ двигать эти самые записи?
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Удаляешь все записи, пишеш нужную последовательность
qwertyuiop
Сообщения: 77
Зарегистрирован: 24 мар 2005, 11:00

Неее... Слишком уж кардинально! ;-)
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

если "порядок" - это некая экспертная функция, которая периодически выполняется, то доп. числовое поле, с интервалом к примеру 100, для вставки в середину.

Если это разовое исправление - можно просто ID поменять... Как - зависит от сервера ;)
Изображение
Юлия_shell
Сообщения: 3
Зарегистрирован: 01 мар 2009, 13:57
Контактная информация:

Alter table и внести нужные данные в обе строки
http://j-shell.ru - сотрудничество, удобное ПО
alexander.spb
Сообщения: 22
Зарегистрирован: 24 мар 2009, 13:25
Откуда: St.Petersburg

Duncon писал(а):Удаляешь все записи, пишеш нужную последовательность
если нет ORDER BY, то, вообще говоря, два одинаковых SELECT'a могут дать result set, в которых порядок следования строк разный.
Ответить