我有一个这样的合同表(删除了无关的数据):
CREATE TABLE `contracts` (
`id` INT(12),
`serviceid` INT(10),
`mode` CHAR(1),
`months` TINYINT(3),
`dateStart` INT(12),
`dateEnd` INT(12),
PRIMARY KEY (`id`)
)
数据可能是这样的:
| id | serviceid | mode | months | dateStart | dateEnd |
| 1 | 111112 | active | 24 | 1319115600 | 1382274000 |
| 1 | 111113 | active | 6 | 1319115600 | 1382274000 |
| 1 | 111114 | active | 12 | 1319115600 | 1382274000 |
我想添加一个基于用户合约时间的收费表,如下所示:
CREATE TABLE `new_charge` (
`id` INT(10),
`operator` VARCHAR(1),
`contract_length` TINYINT(2),
`amount` DECIMAL(5,2),
PRIMARY KEY (`id`)
)
数据可能是这样的:
| id | operator | contract_length | amount |
| 1 | < | 6 | 100 |
| 2 | > | 6 | 50 |
意思是,如果合同期限<6个月,则收取100美元。如果> 6个月收取50美元。
虽然,对我的建模看起来不错我似乎无法编写一个允许我检索费用金额的查询,而不必诉诸额外的查询。
任何人都可以帮助我
由于
答案 0 :(得分:0)
如果合同可以使用一百年,那么此表仍然只需要1200行。就个人而言,我会在两列上使用CHECK()约束,但MySQL不支持CHECK()约束。
CREATE TABLE new_charge (
contract_length_months integer not null,
amount_usd DECIMAL(5,2),
PRIMARY KEY (contract_length_months )
);
insert into new_charge values (1, 100);
insert into new_charge values (2, 100);
insert into new_charge values (3, 100);
insert into new_charge values (4, 100);
insert into new_charge values (5, 100);
insert into new_charge values (6, 100);
insert into new_charge values (7, 50);
insert into new_charge values (8, 50);
insert into new_charge values (9, 50);
insert into new_charge values (10, 50);
insert into new_charge values (11, 50);
insert into new_charge values (12, 50);
insert into new_charge values (13, 50);
insert into new_charge values (14, 50);
...
select c.*, nc.amount_usd
from contracts c
inner join new_charge nc on c.months = nc.contract_length_months