Помогите сформировать SQL запрос

artnik7

Новичок
Мне нужно увеличить все ID на 1 в таблице после определенного, к примеру после 20 id.
Как можно так сделать одним или несколькими запросами?

Мне это нужно для того, чтобы я мог вставлять данные между 19 и 20 ID.
PS: ID в таблице помечен как не уникальный, но мне важно, чтобы он не повторялся
 

baev

‹°°¬•
Команда форума
Мне нужно увеличить все ID на 1 в таблице после определенного, к примеру после 20 id.
Как можно так сделать одним или несколькими запросами?

Мне это нужно для того, чтобы я мог вставлять данные между 19 и 20 ID.
PS: ID в таблице помечен как не уникальный, но мне важно, чтобы он не повторялся
— читайте http://phpfaq.ru/base#id
 

artnik7

Новичок
baev, спасибо за ответ.
В этом FAQ пишется что ID не обязательно должен быть уникальным. А мне, как раз наоборот, нужен уникальный, т.к. данные у меня выводятся через order by id. А если два или более id будут одинаковыми, то вывод может быть не точным
 

artnik7

Новичок
То есть это у меня даже не главный ID а это идентификатор позиции в списке, ID у меня отмечен как первичный, автоинкримент, а этот (position_id) просто как числовое значение
 

KorP

Новичок
ну видимо что то типа
PHP:
UPDATE table SET position_id=position_id+1 WHERE position_id > 20
 

KorP

Новичок
Создал новый пост, где более подробно расписал задачу http://phpclub.ru/talk/threads/70075
зачем плодить темы то? можно было и эту отредактировать
если эти id (хотя какие это id нафиг?) для сортировки, перейди на трёх-четырёхзначные величины и добавляй себе спокойно
 

artnik7

Новичок
KorP, работает! Спасибо. Но новый топик, пусть будет. Может есть более простой способ, чтобы всю базу не тормошить
 

KorP

Новичок
а зачем базу то тормошить при этом? вычисляй значение между имеющимися и его используй
 

artnik7

Новичок
Просто я подумал если слов будет много, то база будет трещать, пока во всех полях не увеличит этот position_id
 

KorP

Новичок
так, ты сейчас про что - про запрос выше или про ответ на тему по ссылке?
если про запрос - а как ты хотел поменять значения во всей базе, не трогая при этом всю базу?
если про ответ по ссылке - зачем всю базу? вместе с имеющимися словами выбираешь их pначение:
слов - перевод - 100
слов - перевод - 200
слов - перевод - 300
после того как добавили слово - вычисляешь для него значение, допустим 210 и записываешь слово и значение, не трогая при этом всю базу
 

baev

‹°°¬•
Команда форума
Назначить position_id тип DECIMAL с 9, например, знаками после запятой. И «вставляемому между» элементу назначать position_id, равный частному от деления суммы position_id соседних элементов на два.
Например:
position_id = (1+2)/2 = 1.5
position_id = (1.5+2)/2 = 1.75
position_id = (1.5+1.75)/2 = 1.625
Ну, и так далее…
 
  • Like
Реакции: KorP
Сверху