Поиск по сайту:
taxor.ruБлог — MySQL: хитрая конструкция REPLACE INTO ... SELECT с вычисляемым параметром

MySQL: хитрая конструкция REPLACE INTO ... SELECT с вычисляемым параметром

Поделиться в социальных сетях:

Секция: Сайтостроение и WEB-разработка

Просмотров: 703

Комментариев: 0 — ваш комментарий может стать первым

Очередная задача, возникшая передо мной, заключалась в необходимости добавления в одну таблицу MySQL данных из другой — для всех полей, кроме одного, в котором должна была сохраняться дата добавления в формате mktime(). Основным же нюансом, препятствующим выполнению этой задачи, оказалась принципиальная невозможность использовать в конструкции REPLACE INTO ... SELECT FROM одновременно и SELECT, и VALUES (напомню, что SELECT в запросе REPLACE INTO берёт данные из одной таблицы и помещает в другую, а VALUES размещает данные, непосредственно указанные в запросе).

Немного поразмыслив, я построил следующую конструкцию:

REPLACE INTO target_table (field_1, field_2, add_timepoint) SELECT field_1, field_2, CONCAT_WS("", NULL, '.mktime().') FROM source_table

Построенный таким образом запрос берёт данные из полей field_1 и field_2 таблицы source_table и отправляет их в поля с таким наименованием в таблицу target_table, и кроме того, этот же запрос создаёт значение микротайма (в секции SELECT) и отправляет его в поле add_timepoint таблицы target_table. Почему мной был использован именно CONCAT_WS? Да потому, что значение mktime без этого оператора было бы воспринято в запросе как имя отсутствующего поля и соответственно привело бы к ошибке выполнения, а вот конкатенация с NULL, пустым значением и значением mktime повлекла за собой интерпретацию содержимого как значения для вставки, и в итоге — работоспособность запроса к базе данных.

Комментарии

Добавить новый комментарий:

Как вас зовут:

Проверка, не робот ли вы — введите цифры с картинки:  

Прим. автора сайта: премодерация всех комментариев.

комментариев не найдено — ваш может стать первым!


© «Таксор». Интернет-мастерская М. Ю. Уткина.