![]() ![]() | |
taxpert.ru — Блог — MySQL: хитрая конструкция REPLACE INTO ... SELECT с вычисляемым параметромMySQL: хитрая конструкция REPLACE INTO ... SELECT с вычисляемым параметром18.01.2017 Секция: Сайтостроение и WEB-разработка Просмотров: 1428 Комментариев нет — ваш комментарий может стать первым Очередная задача, возникшая передо мной, заключалась в необходимости добавления в одну таблицу 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 повлекла за собой интерпретацию содержимого как значения для вставки, и в итоге — работоспособность запроса к базе данных. Комментариидобавить комментарийкомментариев не найдено — ваш может стать первым! | |
© Taxpert. Интернет-мастерская М. Ю. Уткина. | |