2016-07-10 5 views
1

Hallo ich bin ein Anfänger in PHP und MySQL. Ich habe zwei Tische gemacht. Die primäre Tabelle ‚Kunden‘ ist:Wie Einfügen Primärschlüsselwert der primären Tabelle in der Fremdschlüsselspalte der unterordneten Tabelle in MySQL?

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

Mein Kind Tisch ‚Aufträge‘ wo ‚menu_id‘ ist ein Fremdschlüssel ist:

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 

nun mit einem einfachen LEFT JOIN kann ich welche Aufträge sehen von welchem ​​Kunden in welchem ​​Datum platziert.

Aber Problem ist, wenn im Fall des Hinzufügens eines neuen Benutzers in meiner 'Kunden' Tabelle kann ich nicht seine 'ID' in die 'menu_id' Spalte als der Fremdschlüssel einfügen.

Nach dieser nehme ich tun

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

und in der Tabelle Aufträge i do

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

Danach wird die Tabelle 'Bestellungen' sieht aus wie

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 

Die menu_id in 'Bestellungen' Tabelle sollte '4' anstelle von 0 zeigen. Ich habe auch tr Ied LAST_INSERT_ID(), aber der Wert, den es bekommt, ist 0. Ich weiß nicht, warum das passiert. Bitte helfen

+1

führen Wenn Sie uns einen Code nicht zeigen, wird es sehr schwer sein, zu erraten, was falsch ist. – Jocelyn

+0

in der Tabelle 'Kunden' INSERT INTO Kunden (Name, Ort, E-Mail) VALUES ('joe', 'new_york', '[email protected]') und in die Bestellungen tabl ich INSERT in Bestellungen (menu_name , menu_id, date_of_order) VALUES ('pizza', 'SELECT id FROM Kunde wo email ='[email protected]', '2016-05-09') –

+0

Klicken Sie unter der Frage auf BEARBEITEN, um dort den relevanten Code hinzuzufügen. Code in Kommentaren ist kaum lesbar. – Jocelyn

Antwort

1

Sie Problem ist, dass Sie das falsch

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

sollte

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'); 

Also im Grunde

sein tun Sie versuchen 'SELECT id FROM customers WHERE email = [email protected]' als Zeichenfolge einzufügen, die in int konvertiert (wenn Sie es haben als int)

Statements erstellen:

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; 

Und Sie Einfügungen:

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'); 

und

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

Vielen Dank. Ich bin sehr verpflichtet. –

+0

Warum habe ich etwas falsch gemacht? –

+0

Warum haben Sie keine Antwort ausgewählt? –

Verwandte Themen