gpt4 book ai didi

MYSQL引用另一个表字段

转载 作者:行者123 更新时间:2023-11-29 03:30:35 24 4
gpt4 key购买 nike

我正在尝试获取特定时间段内销售的产品数量。对于此示例:产品表有一个数量字段,每当销售某种产品​​时该字段就会增加。订单表有开始日期和结束日期。有没有一种方法可以在我的订单表中保留产品表(如对象)的引用,以便我可以看到每个产品在每个开始 - 结束日期的销售数量?一个简单的例子:我有 2 种产品:1 辆自行车 25000 32 辆运动自行车 30000 5 为我的约会对象出售。因此,订单将类似于:1 05.07.2015 05.07.2015 和那些产品。

CREATE TABLE products (
product_no integer PRIMARY KEY,
name varchar(20),
price float,
quantity integer,
);

CREATE TABLE sells (
sell_id integer PRIMARY KEY,
start_date date,
end_date date
);

//新思路:

CREATE TABLE products (
product_no integer PRIMARY KEY,
name varchar(20),
price float
);

CREATE TABLE sells (
sell_id integer PRIMARY KEY,
date date,
quantity integer,
product_id integer FOREIGN KEY
);

最佳答案

除非订单始终针对单个产品,否则我认为您将需要第三张表。对我来说,这种情况下的最小 *) 数据模型如下所示:

CREATE TABLE products (
product_no integer PRIMARY KEY,
name varchar(20) not null,
price float,
quantity_on_stock integer not null
);

CREATE TABLE orders (
order_id integer PRIMARY KEY,
order_date date not null
);

CREATE TABLE orderlines (
order_id integer not null REFERENCES orders.order_id,
product_no integer REFERENCES products.product_no,
price integer,
quantity integer not null,
PRIMARY KEY(order_id, product_no)
);

然后,获取特定时期内销售额的查询可能如下所示:

select
p.product_no,
p.name,
sum(ol.quantity)
from
products p
inner join orderlines ol on ol.product_no = p.product_no
inner join orderlines o on o.order_id = ol.order_id
where
ol.order_date between :start_date and :end_date

*) 我说的是极小,但实际上并没有那么小。您可能还想存储发票,或者至少是某种表明订单是否实际付款和交付的指示,因为有时订单会被取消,或者只是等待打开。

关于MYSQL引用另一个表字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com