2017-02-13 4 views
1

У меня есть две таблицы. Временная таблица:Вставьте данные из одной таблицы в другую таблицу и добавьте новые значения

CREATE TABLE IF NOT EXISTS `temporary` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `FK_user` int(11) NOT NULL, 
    `FK_bin` varchar(50) NOT NULL, 
    `orderDate` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=35 ; 

И заказы таблица:

CREATE TABLE IF NOT EXISTS `orders` (
    `id` int(11) NOT NULL, 
    `FK_user` int(11) NOT NULL, 
    `FK_bin` varchar(50) NOT NULL, 
    `orderNumber` varchar(11) NOT NULL, 
    `orderDate` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Я хочу, чтобы вставить все значения временной таблицы в таблицу Orders и добавьте ORDERNUMBER вручную с этим: uniqid(rand()).

меня использовать INSERT INTO orders SELECT * FROM temporary WHERE FK_user = ? Но они не работают, потому что ORDERNUMBER не существует в таблице временного ...

Как я могу сделать? пожалуйста

+1

Я не вижу проблемы там. Просто укажите столбцы в выборе 'INSERT INTO ORDERS (id, FK_user, FK_bin, orderNumer, orderDate) SELECT t.id, t.FK_user, t.FK_bin, UUID() как номер порядка, t.orderDate из временного t;' – Rumpelstinsk

+1

Не используйте 'SELECT *'. упомянуть имена каждого столбца в обоих вставлять в и выбирать утверждения ... – Naga

ответ

4

Надеюсь, я правильно понимаю ваш вопрос. Я думаю, что ниже поможет запрос.

INSERT INTO orders(id , FK_user , FK_bin , orderNumber , orderDate) 
(SELECT id , FK_user , FK_bin , uniqid(rand()) AS orderNumber , orderDate 
FROM temporary WHERE FK_user = ?); 

Используйте свою функцию для создания номера заказа в предложении выбора, как указано в вышеприведенном запросе.

+0

Спасибо, это работа, у меня есть вопрос: «как» заключается в подключении uniqid переменной к столбцу orderNumber? – Rocstar

+1

Как используется, чтобы дать псевдоним ценности вашей функции. В этом случае мы даем alias orderNumber uniqid (rand()). – Tajinder

Смежные вопросы