Вставить или обновить записи (2 таблицы)

StalkerClasses

Новичок
Есть две таблицы с одинаковыми структурами.

В таблице №1 хранятся записи страниц сайта.
В таблице №2 хранятся записи переводов страниц сайта.

В таблицу №2 понадобилось вставить запись с языком по умолчанию из таблицы №1.

Как может выглядеть запрос INSERT что бы перенести записи из таблицы №1 в таблицу №2, или сделать UPDATE в таблице №2, если запись существует?
 

Kotofey

FloodMaster.
INSERT tb1 (...) SELECT ... FROM tb2

INSERT INTO ON DUPLICATE KEY UPDATE

и лучший запрос это в google.com
 

StalkerClasses

Новичок
Посмотрел и из примеров в основном нашел:
PHP:
   insertinto profiles (`uid`,`name`,`surname`)
   values(10,'first_name','last_name')
   onduplicate keyupdate`name`='first_name',`surname`='last_name'
Это получается что нужно каждую строку перебирать.
А хочется 1-им запросом.
 

StalkerClasses

Новичок
Решил немного переделать идею.

Есть две таблицы (№1 - 100 записей, №2 - 20 записей).

Возможно без PHP минимум MySQL-запросов "сливать" записи из данных двух таблиц в таблицу №3 (структура всех таблиц одинаковая) и держать их постоянно в таком актуальном состоянии. Т.е. в таблице №3 должно быть 120 записей.

Так понимаю что для INSERT должно быть-что то вроде:
PHP:
INSERT INTO table3 (name, type, text)
SELECT name, type, text FROM (
SELECT name, type, NULL AS text FROM table1
UNION ALL
SELECT NULL as name, NULL as type, text FROM table2) AS t
Но как написать условие, что бы не вставлялись уже записи, которые есть в таблицах №1 и №2.

Вроде этого: http://stackoverflow.com/questions/25218723/select-particular-data-from-table1-which-is-not-in-table2-with-where-clause

Отдельным запросом потом пойдет UPDATE, а также
отдельным запросом потом пойдет DELETE.
 
Последнее редактирование:

Kotofey

FloodMaster.
Решил немного переделать идею.

Есть две таблицы (№1 - 100 записей, №2 - 20 записей).

Возможно без PHP минимум MySQL-запросов "сливать" записи из данных двух таблиц в таблицу №3 (структура всех таблиц одинаковая) и держать их постоянно в таком актуальном состоянии. Т.е. в таблице №3 должно быть 120 записей.

Так понимаю что для INSERT должно быть-что то вроде:
PHP:
INSERT INTO table3 (name, type, text)
SELECT name, type, text FROM (
SELECT name, type, NULL AS text FROM table1
UNION ALL
SELECT NULL as name, NULL as type, text FROM table2) AS t
Но как написать условие, что бы не вставлялись уже записи, которые есть в таблицах №1 и №2.
Ты уверен , что это хорошее решение и не стоит пересмотреть архитектуру приложения в общем?)
 

StalkerClasses

Новичок
Ты уверен , что это хорошее решение и не стоит пересмотреть архитектуру приложения в общем?)
Да, я уверен.
Есть CMS - я сейчас делаю локализацию.

У нее есть два подхода к локализации записей в таблицах.
Первый - это на базе одной таблицы (здесь я реализовал выборку записей).
Второй - это на базе двух таблиц (здесь очень сложно реализовать, по этому сейчас хочу сделать 1 доп. таблицу №3 - где буду работать также как с первым вариантом.).
 

WMix

герр M:)ller
Партнер клуба
@StalkerClasses, чтоб понимать, это не решение а обход, чтоб красиво решить нужно понять проблему.
 

WMix

герр M:)ller
Партнер клуба
триггеры, они только на insert, update и delete. они вызываются и делают то что скажешь делать!
 
Сверху