我有一个问题,如何下订单产品,然后将订单插入5个连接的表:ONE-TO-MANY,这些表是如此连接,当客户进入房间时,放置一个订购产品,例如咖啡或水必须在下订单的订单页面中显示,顾客坐在哪个房间,然后服务员从状态获得订单是产品是否付款。 表格是:
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 :(得分: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。