2013-08-07 111 views
0

我有一個問題,如何下訂單的產品,然後將訂單插入到連接的5個表中:一對多,這些表如此連接以至於當客戶進入房間,爲例如產品訂購產品咖啡或水,它必須顯示在下訂單的訂單頁面中,客戶坐在哪個房間,然後服務員從訂單狀態獲取訂單是產品是否付款。 表是:從html表格中插入數據到5個表中

CREATE TABLE IF NOT EXISTS `user` (
    `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `type_id` int(10) unsigned NOT NULL, 
    `username` varchar(50) DEFAULT NULL, 
    `password` varchar(32) DEFAULT NULL, 
    `first_name` varchar(100) DEFAULT NULL, 
    `last_name` varchar(100) DEFAULT NULL, 
    `email` varchar(50) DEFAULT NULL, 
    `picture` varchar(200) DEFAULT NULL, 
    PRIMARY KEY (`user_id`), 
    UNIQUE KEY `user_index1780` (`username`), 
    KEY `user_FKIndex1` (`type_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=71 ; 

CREATE TABLE IF NOT EXISTS `order` (
    `order_id` int(11) NOT NULL AUTO_INCREMENT, 
    `time` timestamp NULL DEFAULT CURRENT_TIMESTAMP, 
    `status` int(11) DEFAULT NULL, 
    `room_id` int(11) NOT NULL, 
    `user_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`order_id`), 
    KEY `fk_order_room1` (`room_id`), 
    KEY `fk_order_user2` (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; 

CREATE TABLE IF NOT EXISTS `product` (
    `product_id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(100) DEFAULT NULL, 
    `price` float DEFAULT NULL, 
    `picture` varchar(500) DEFAULT NULL, 
    PRIMARY KEY (`product_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; 

CREATE TABLE IF NOT EXISTS `room` (
    `room_id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(100) DEFAULT NULL, 
    `picture` varchar(450) DEFAULT NULL, 
    `description` text, 
    `user_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`room_id`), 
    KEY `fk_room_user1` (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 

CREATE TABLE IF NOT EXISTS `item_orders` (
    `order_id` int(11) NOT NULL, 
    `product_id` int(11) NOT NULL, 
    `quantity` int(11) DEFAULT NULL, 
    PRIMARY KEY (`order_id`,`product_id`), 
    KEY `fk_order_has_product_product1` (`product_id`), 
    KEY `fk_order_has_product_order1` (`order_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE IF NOT EXISTS `type_user` (
    `type_id` int(10) unsigned NOT NULL, 
    `name` varchar(20) DEFAULT NULL, 
    PRIMARY KEY (`type_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

現在在我內加入到其中來下訂單的產品沒有發生的事情。

查詢是:

SELECT order.order_id, 
     user.first_name AS user, 
     product.name, 
     product.price, 
     item_orders.quantity, 
     product.price * item_orders.quantity AS sum, 
     room.name, 
     order.time, 
     order.status 
FROM user, product, room, `order`, item_orders 
WHERE user.user_id = room.user_id 
    AND order.room_id = room.room_id 
    AND order.order_id = item_orders.order_id 
    AND product.product_id = item_orders.product_id 

此連接就好了它只是進入一個新加入的order_id =「$ ORDER_ID」,就是這樣。

+0

嗨!感謝您的問題,歡迎來到Stack Overflow!很好,你爲你的表格發佈了DDL,但是也請顯示你的查詢。 –

+0

好吧我發佈了查詢 – cappie

+0

您發佈的每個SQL查詢一次只使用一個表。 –

回答

0

只要你從查詢中引用的所有表插入數據:

INSERT INTO type_user (type_id) VALUES (1); 
INSERT INTO user (user_id, type_id, first_name) VALUES (1, 1, 'cappie'); 
INSERT INTO room (room_id, user_id, name) VALUES (10, 1, 'Room 10'); 
INSERT INTO `order` (order_id, room_id, user_id, status) VALUES (1 , 10, 1, 3); 
INSERT INTO product (product_id, name, price) VALUES (100, 'Product A', 99.99); 
INSERT INTO item_orders (order_id, product_id, quantity) VALUES (1, 100, 15); 

您所提供的查詢(在評論)將會運行得很好,並返回(幾乎)正確Results

| ORDER_ID | USER |  NAME |   PRICE | QUANTITY |    SUM |       TIME | STATUS | 
-------------------------------------------------------------------------------------------------------------------------- 
|  1 | cappie | Product A | 99.98999786377 |  15 | 1499.849967956543 | August, 08 2013 07:03:34+0000 |  3 | 

您有浮點舍入錯誤,但是that's a story for another day

這裏是完整的SQL Fiddle

+0

好的謝謝你的建議,但在狀態欄是布爾0或1 ,0表示未支付產品,1表示支付產品。以及如何解決浮點舍入錯誤?我聽到它的第一次 – cappie

+0

對於浮點舍入誤差,因爲產品的價格是圓的,價格不應該是一個問題:6,7,8,12 $。 – cappie

+0

「狀態」列被聲明爲「int(11)」。你應該宣佈它是'BOOLEAN'來記錄這個事實。無論如何,我插入隨機值只是爲了顯示您的查詢*工作正常*。 –