Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обновить поле значением другого поля. / 14 сообщений из 14, страница 1 из 1
06.12.2018, 15:56
    #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
06.12.2018, 16:28
    #39743670
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить поле значением другого поля.
savsoftможно ли это использовать в реальном проекте?Можно. Но нельзя. Чтобы не было мучительно больно, если в очередной версии порядок выполнения присвоений вдруг перекосится.
...
Рейтинг: 0 / 0
06.12.2018, 16:33
    #39743678
savsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить поле значением другого поля.
То есть, если нужно присвоить значения трем полям, то использовать два JOIN?
...
Рейтинг: 0 / 0
06.12.2018, 16:44
    #39743689
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить поле значением другого поля.
savsoftТо есть, если нужно присвоить значения трем полям, то использовать два JOIN?Ха... это если есть за что зацепиться... а если нет уникального поля, фиг ты нормально свяжешь копии... По уму, это надо делать в три запроса, копируя по одному полю. Или, если значения позволяют, в два запроса (в первом всё собрать в поле F4, а во втором раскидать обратно).

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

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

Спасибо
...
Рейтинг: 0 / 0
06.12.2018, 16:47
    #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
06.12.2018, 16:48
    #39743698
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить поле значением другого поля.
savsoftРеально мне нужно запомнить значение поля F1 в поле F1Orig, а поле F1 изменить.А тип полей - какой?
...
Рейтинг: 0 / 0
06.12.2018, 17:23
    #39743722
savsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить поле значением другого поля.
AkinasavsoftРеально мне нужно запомнить значение поля F1 в поле F1Orig, а поле F1 изменить.А тип полей - какой?

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

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

Строго неделя.
...
Рейтинг: 0 / 0
07.12.2018, 07:51
    #39743979
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить поле значением другого поля.
Мда... крутил-вертел - пока не получается обработать все три варианта, оставаясь в рамках однотабличного запроса. И переменные не помогают. Ещё помыслю...
...
Рейтинг: 0 / 0
07.12.2018, 13:09
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обновить поле значением другого поля. / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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