powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обновить поле значением другого поля.
14 сообщений из 14, страница 1 из 1
Обновить поле значением другого поля.
    #39743619
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,

Читал, что для перестановки значений полей в одной строке таблицы, нужно использовать JOIN.

Но если перестановка не нужна, а нужно просто сохранить значение поля в другом поле, а потом изменить поле, типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
UPDATE my_table
set
  f1 = f2,
  f2 = f3,
  f3 = f4,
  f4 = 'new value'
WHERE <condition>; 



Попробовал, так работает. Но можно ли это использовать в реальном проекте? Нет подводных камней?

Спасибо
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743670
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savsoftможно ли это использовать в реальном проекте?Можно. Но нельзя. Чтобы не было мучительно больно, если в очередной версии порядок выполнения присвоений вдруг перекосится.
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743678
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть, если нужно присвоить значения трем полям, то использовать два JOIN?
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743689
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savsoftТо есть, если нужно присвоить значения трем полям, то использовать два JOIN?Ха... это если есть за что зацепиться... а если нет уникального поля, фиг ты нормально свяжешь копии... По уму, это надо делать в три запроса, копируя по одному полю. Или, если значения позволяют, в два запроса (в первом всё собрать в поле F4, а во втором раскидать обратно).

Но можно оставить и так... вот только при каждом обновлении тестироваться. И молиться, что в текущей версии наблюдаемый порядок присвоения "слева направо" - детерминированный, а не случайно получился нужный.
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743690
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinasavsoftможно ли это использовать в реальном проекте?Можно. Но нельзя. Чтобы не было мучительно больно, если в очередной версии порядок выполнения присвоений вдруг перекосится.

Реально мне нужно запомнить значение поля F1 в поле F1Orig, а поле F1 изменить. Где можно об этом посмотреть.

Спасибо
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743696
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как это звучит в документации:

https://dev.mysql.com/doc/refman/8.0/en/update.html The second assignment in the following statement sets col2 to the current (updated) col1 value, not the original col1 value. The result is that col1 and col2 have the same value. This behavior differs from standard SQL.
Код: sql
1.
UPDATE t1 SET col1 = col1 + 1, col2 = col1;


Single-table UPDATE assignments are generally evaluated from left to right. For multiple-table updates, there is no guarantee that assignments are carried out in any particular order.
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743698
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savsoftРеально мне нужно запомнить значение поля F1 в поле F1Orig, а поле F1 изменить.А тип полей - какой?
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743722
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinasavsoftРеально мне нужно запомнить значение поля F1 в поле F1Orig, а поле F1 изменить.А тип полей - какой?

DATE, нужно сохранить предыдущую дату, а к дате добавить неделю к строкам по условию.
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743818
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значение F1Orig ДО обновления - какое? NULL?
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743821
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaЗначение F1Orig ДО обновления - какое? NULL?

Первый раз да, NULL. А в следующий раз не нуль. Но меня интересует только одно предыдущее значение.
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743825
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savsoftПервый раз да, NULL. А в следующий раз не нуль.То есть в общем случае - не NULL? А к значению F1 добавляется всегда строго неделя? или тоже от балды?
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743867
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinasavsoftПервый раз да, NULL. А в следующий раз не нуль.То есть в общем случае - не NULL? А к значению F1 добавляется всегда строго неделя? или тоже от балды?

Строго неделя.
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39743979
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда... крутил-вертел - пока не получается обработать все три варианта, оставаясь в рамках однотабличного запроса. И переменные не помогают. Ещё помыслю...
...
Рейтинг: 0 / 0
Обновить поле значением другого поля.
    #39744228
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но значение, к которому добавляется неделя всегда есть. NULL это поле для оригинального значения при его изменении.
То есть - есть расписание. И если с определенной даты оно сдвигается, то сдвигаются только даты этого же дня недели.
При этом ставится кто сдвигал и когда. Запрос типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
UPDATE hometasks
    SET 
       ht_date_pre = ht_date,
       ht_date = DATE_ADD(ht_date, INTERVAL 1 WEEK),
       ht_user_id = 10,
       ht_ts = '<timestamp>'				
    WHERE ht_cli_id = 4 
                AND ht_date >= '<start_date>'
                AND DAYOFWEEK(ht_date) = DAYOFWEEK(<start_date>);



Получается в моем случае даже не нужно запоминать дату, так как сдвигается на одну неделю, а просто ставить флаг сдвига, а при откате последнего сдвига просто отнимать одну неделю.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обновить поле значением другого поля.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]