2009-05-25 44 views
1

我正在开发一个每天处理大约500张发票的后端。我在我的数据库中有以下表格。我如何获得每张发票的价格?

invoices 
invoice_id int primary_key auto_increment 
user_id varchar(10) 
invoice_type enum { package, document } 


users 
user_id int primary_key auto_increment 
rate_package_id int 
rate_document_id int 

rates 
rate_id int 
rate_name varchar(10) 

rate_prices 
price_id int primary_key auto_increment 
rate_id int 
weight int 
price double(8,2) 

在一天结束时,我必须为每张发票设定价格。

我如何得到每张发票的价格?除了将'rate_package_id'和'rate_package_document_id'添加到发票表格中,我实际上没有任何ieda,因此我可以直接从rate_prices查询价格。

回答

3
SELECT invoice_id, price 
FROM invoices i 
JOIN users u 
ON  u.user_id = i.user_id 
JOIN rates r 
ON  r.rate_id = CASE WHEN i.invoice_type = package THEN u.rate_package_id ELSE u.rate_document_id END 
JOIN rate_prices p 
ON  p.rate_id = r.rate_id 

不知道你在哪里保持你的包裹的重量。

似乎它一定是invoices,在这种情况下,只需将其添加到最后JOIN条件。

+0

Quassnoi //谢谢! 这是很长的SQL查询。 – Moon 2009-05-25 21:57:47

1

我想你可能会需要其将与发票关联的了LineItem表,如:

lineitem_id int primary_key auto_increment 
invoice_id int 
price_id int 
quantity int 
total_price double(8,2) 

你再有一个表,带发票的价格相关联,每张发票可以有1个或多个线项目。