2016-07-10 5 views
1

Привет, я новичок в PHP и MYSQL. Я сделал две таблицы. Первичная таблица «клиентов»:Как вставить значение первичного ключа первичной таблицы в столбец внешнего ключа дочерней таблицы в MySQL?

id | name | place | email 
1 bob  berlin [email protected] 
2 kary  dresden [email protected] 
3 sam  zurich [email protected] 

моего ребенка таблицы «Заказы», ​​где «menu_id» является внешний ключ:

id | menu_name | menu_id | date_of_order 
1 sandwich  2  2016-05-03 
2 fruits   3  2016-05-02 
3 pizza   1  2016-05-04 
4 salad   1  2016-05-06 

Теперь с помощью простого LEFT JOIN я могу увидеть, какие заказы по которому клиент в какой день.

Но проблема в том, когда в случае добавления нового пользователя в таблицу «клиентов» я не могу вставить его «id» в столбец «menu_id» в качестве внешнего ключа.

После этого предположим, что я делать

INSERT INTO customers (name, place, email) VALUES ('joe', 'melbourne', '[email protected]')

и в таблице заказов я сделать

INSERT INTO orders(menu_name, menu_id, date_of_order) 
VALUES('pizza', 'SELECT id FROM customers WHERE email = [email protected]', '2016-05-09') 

После этого таблица 'Заказы' выглядит

id | menu_name | menu_id | date_of_order 
1 sandwich  2  2016-05-03 
2 fruits   3  2016-05-02 
3 pizza   1  2016-05-04 
4 salad   1  2016-05-06 
5 pizza   0  2016-05-09 

menu_id в таблице «orders» должно отображаться «4» вместо 0. Я также tr ied LAST_INSERT_ID(), но все же значение, которое оно получает, равно 0. Я не знаю, почему это происходит. Пожалуйста, помогите

+1

Если вы не показать нам код, это будет очень трудно догадаться, что это неправильно. – Jocelyn

+0

в таблице «customers» Я делаю INSERT INTO клиентов (имя, место, адрес электронной почты) VALUES ('joe', 'new_york', '[email protected]'), а в заказе tabl я делаю INSERT в заказы (menu_name , menu_id, date_of_order) VALUES ('pizza', 'SELECT id FROM customer, где email ='[email protected]', '2016-05-09') –

+0

Нажмите EDIT под вопросом, чтобы добавить там соответствующий код. Код в комментариях едва читаем. – Jocelyn

ответ

1

Вы проблема заключается в том, что вы делаете это неправильно

INSERT INTO orders(menu_name, menu_id, date_of_order) VALUES('pizza', 'SELECT id FROM customers WHERE email = [email protected]', '2016-05-09') 

должен быть

INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('pizza', (SELECT `id` FROM `customers` WHERE `email` = '[email protected]' limit 1), '2016-05-09'); 

Таким образом, вы в основном пытаетесь вставить 'SELECT id FROM customers WHERE email = [email protected]' как строка, которая превращающая в целое (если у вас есть as int)

Создание заявлений:

CREATE TABLE `customers` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(245) DEFAULT NULL, 
    `place` varchar(245) DEFAULT NULL, 
    `email` varchar(245) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; 

CREATE TABLE `orders` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `menu_name` varchar(245) DEFAULT NULL, 
    `menu_id` int(11) DEFAULT NULL, 
    `date_of_order` date DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `FK orders menu_id customer id_idx` (`menu_id`), 
    CONSTRAINT `FK orders menu_id customer id` FOREIGN KEY (`menu_id`) 
     REFERENCES `customers` (`id`) 
     ON DELETE SET NULL ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; 

И вам Вставки:

INSERT INTO `customers` (`name`, `place`, `email`) VALUES ('bob', 'berlin', '[email protected]'); 
INSERT INTO `customers` (`name`, `place`, `email`) VALUES ('kary', 'dresden', '[email protected]'); 
INSERT INTO `customers` (`name`, `place`, `email`) VALUES ('sam', 'zurich', '[email protected]'); 


INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('sandwich', (SELECT id FROM customers WHERE email = '[email protected]' limit 1), '2016-05-09'); 
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('fruits', (SELECT id FROM customers WHERE email = '[email protected]' limit 1), '2016-05-09'); 
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('pizza', (SELECT id FROM customers WHERE email = '[email protected]' limit 1), '2016-05-09'); 
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('salad', (SELECT id FROM customers WHERE email = '[email protected]' limit 1), '2016-05-09'); 


INSERT INTO `customers` (`name`, `place`, `email`) VALUES ('joe', 'melbourne', '[email protected]'); 
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('pizza', (SELECT id FROM customers WHERE email = '[email protected]' limit 1), '2016-05-09'); 

и приводят

mysql> select * from customers; 
+----+------+-----------+---------------+ 
| id | name | place  | email   | 
+----+------+-----------+---------------+ 
| 1 | bob | berlin | [email protected] | 
| 2 | kary | dresden | [email protected] | 
| 3 | sam | zurich | [email protected] | 
| 4 | joe | melbourne | [email protected] | 
+----+------+-----------+---------------+ 
4 rows in set (0.02 sec) 

mysql> select * from orders; 
+----+-----------+---------+---------------+ 
| id | menu_name | menu_id | date_of_order | 
+----+-----------+---------+---------------+ 
| 1 | sandwich |  2 | 2016-05-09 | 
| 2 | fruits |  3 | 2016-05-09 | 
| 3 | pizza  |  1 | 2016-05-09 | 
| 4 | salad  |  1 | 2016-05-09 | 
| 5 | pizza  |  4 | 2016-05-09 | 
+----+-----------+---------+---------------+ 
5 rows in set (0.02 sec) 
+0

большое спасибо. Я очень признателен. –

+0

Почему я сделал что-то неправильно? –

+0

Почему вы не выбрали ответ? –

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