|
|
|
| Всех приветствую. Люди добрые, может кто сталкивался с ситуацией следующего плана. Есть база мускуль (5.0.18), есть 2 строки с разными номерами, скажем 120 и 121. их надо поменять местами, изменить индексы.
одним запросом можно ?? так чтобы временный индекс не создавать и не удалять сами строки.
Если да, то подскажите плиз как. Очень нужен вариант решения. | |
|
|
|
|
|
|
|
для: Jura
(30.09.2007 в 12:51)
| | Можно поступить следующим образом
UPDATE tbl SET id = 120 + 121 - id
WHERE id IN (120, 121)
|
| |
|
|
|
|
|
|
|
для: cheops
(30.09.2007 в 13:04)
| | Спасибо, щас попробую.
что-то не получилось. :(
записи могут идти не следом друг за другом, а хаотично. скажем 158 и 163 | |
|
|
|
|
|
|
|
для: Jura
(30.09.2007 в 13:13)
| | Хм... так и подставляйте вместо 120 и 121 - 158 и 163. | |
|
|
|
|
|
|
|
для: cheops
(30.09.2007 в 13:31)
| | Пишет "Duplicate entry '163' for key 1"
вероятно потому, что это ключевое поле. Как тут быть? даже и не знаю. | |
|
|
|
|
|
|
|
для: Jura
(30.09.2007 в 13:57)
| | Кстати, а можно в одном update сделать несколько ? set и where ???
Экспериментировал, но не получилось.
Вот что я имею ввиду. Это самый простой был бы вариант. Полагаю, что где-то в синтаксисе неполадка.
Важна именно одиночная запись в базу, тогда это получится сделать даже с ключами.
UPDATE tbl (SET id='158' WHERE id='163') and (SET id='163' WHERE id='158');
|
| |
|
|
|
|
|
|
|
для: Jura
(30.09.2007 в 14:08)
| | Нет, MySQL это не позволяет... А почему требуется именно один запрос - ведь с несколькими запросами было бы гораздо удобнее? | |
|
|
|
|
|
|
|
для: cheops
(30.09.2007 в 14:37)
| | давайте попробуем несколькими. только без удаления записей. велик риск потери данных. Насколько я правильно изучил теорию, проблема именно в том, что это ключевое уникальное поле. | |
|
|
|
|
|
|
|
для: Jura
(30.09.2007 в 14:08)
| | Можно. Если чуть чуть подумать.
UPDATE tbl
SET id= 158 + 163 - id
WHERE id IN (158,163)
|
Естественно, id не должен быть первичным ключом.
Первичные ключи вообще модификации не подлежат. | |
|
|
|
|
|
|
|
для: Trianon
(30.09.2007 в 21:33)
| | Выход нашел в получении данных, а потом при помощи replace замещать. Спасибо всем откликнувшимся, тут дело именно в том, что это первичные ключи. | |
|
|
|