Как сформировать запрос?

Тема в разделе "Базы данных", создана пользователем Welho®, 18 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Welho®

    Welho® Предвестник пьянки

    Регистр.:
    4 дек 2007
    Сообщения:
    855
    Симпатии:
    330
    Название темы походу тупее не бывает, но все же.

    есть таблица, в ней поле ID, поле содержит числовые значения.
    возникла необходимость сменить эти числовые значения от текущего например на +23
    то есть в поле ID значения 1,2,3,4,28,31 а поменять надо на +23 от текущего, то есть получается 24,25,26,27,51,54 и так далее массово )))
    как это сделать?
     
  2. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    update set ID = ID+23
     
  3. Welho®

    Welho® Предвестник пьянки

    Регистр.:
    4 дек 2007
    Сообщения:
    855
    Симпатии:
    330

    при таком варианте начинает ругаться на дублирование ID
     
  4. NeoGayver

    NeoGayver

    Регистр.:
    27 авг 2008
    Сообщения:
    225
    Симпатии:
    83
    UPDATE TB SET ID = ID +33 ORDER BY ID DESC
    Это на случай совпадения идентификаторов!
     
    Welho® нравится это.
  5. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    на время update сделай поле ID не уникальным
     
  6. tlittle

    tlittle Постоялец

    Регистр.:
    26 мар 2009
    Сообщения:
    74
    Симпатии:
    13
    Либо сними флаг unique с поля id (хотя оно, вероятно - primary key), либо воспользуйся предыдущим советом. Поясню.

    По-умолчанию, мускул берет строки по-порядку, т.е, в порядке возрастания. При этом, когда он прибавляет 23 к строке с айди 1, его значение становится 24. В то же время, с достаточно большой долей вероятности, это же значение содержит строка 24. Чтобы обойти это, мы сортируем строки в процессе измениния не по возрастанию, а по убыванию от самого большого значения. Т.е., если мы к последней строке прибавим 23, то она уже не будет пересекаться с последующими строками:

    UPDATE TB SET ID = ID +23 ORDER BY ID DESC
     
  7. hegel

    hegel Писатель

    Регистр.:
    24 авг 2008
    Сообщения:
    9
    Симпатии:
    0
    Так если обратно потом менять всё равно ругаться будет или данные потеряешь
     
  8. kaktusan

    kaktusan Писатель

    Регистр.:
    1 окт 2009
    Сообщения:
    4
    Симпатии:
    0
    с какого это он потом будет ругаться, поле то будет снова уникальным
     
  9. tlittle

    tlittle Постоялец

    Регистр.:
    26 мар 2009
    Сообщения:
    74
    Симпатии:
    13
    Нет. У нас было миллион триллионов уникальных значений. Мы к каждому прибавили однаковое число. Получили тот же самый миллион триллионов уникальных значений, но каждое значение увеличилос.
     
  10. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    Так потом надо обратно на 23 уменьшить? тогда просто сортируй по возрастанию.
     
Статус темы:
Закрыта.