【发布时间】:2011-08-27 03:04:11
【问题描述】:
我有以下表格
customers
cust_id cust_name
1 a company
2 a company 2
3 a company 3
tariffs
tariff_id cost_1 cost_2 cost_3
1 2 0 3
2 1 1 1
3 4 0 0
terminals
term_id cust_id term_number tariff_id
1 1 12345 1
2 1 67890 2
3 2 14324 1
4 3 78788 3
usage
term_ident usage_type usage_amount date
12345 1 20 11/12/2010
67890 2 10 31/12/2010
14324 1 1 01/01/2011
14324 2 5 01/01/2011
78788 1 0 14/01/2011
在现实生活中,表格非常大 - 有 5000 个客户、250 个资费、500000 个终端和 500 万条使用记录。
在终端表中 - term_id、cust_id 和关税_id 都是外键。使用表中没有外键 - 这只是从 csv 文件导入的原始数据。
使用表中可能存在终端表中不存在的终端 - 这些可以忽略。
我需要为每位客户开具使用发票。我只想包括 2010 年 12 月 15 日到 2011 年 1 月 15 日之间的使用情况——这是计费期。我需要根据其关税计算使用发票的行项目......例如:取使用表中的第一条记录 - usage_1 的成本(对于 term_id 1)将是 90x2=180,这是因为term_ident 使用关税 ID 编号 1。
输出应该如下
Customer 2
date terminal usage_cost_1 usage_cost_2 usage_cost_3 total cost
01/01/2011 14324 18 0 6 24
我是一名称职的 PHP 开发人员 - 但只是 SQL 的初学者。我需要一些建议是生成发票的最有效过程 - 也许有一个 SQL 查询可以在 PHP 处理开始计算成本之前帮助我 - 或者 SQL 语句也可能产生成本?欢迎任何建议....
编辑:
1) 目前有一些东西正在运行这个进程 - 它是用 C++ 编写的,大约需要 24 小时来处理这个......我无法访问源代码。
2) 我在 Symfony 中使用 Doctrine——我不确定 Doctrine 对检索数据有多大帮助,因为 Objects 只会减慢这个过程——而且我不确定使用 Objects 在这里是否会有太大帮助?
编辑@13:54 ->
使用表指定不正确...抱歉!
我必须将usage_type映射到每个终端的特定关税成本,即usage_type 1 = cost_1 in适当的关税......我想这会让它稍微复杂一些?
【问题讨论】:
-
我怎么知道 term_ident=12345 使用了关税 ID=1?它是否使用从 1 到 5 的所有关税 ID?
-
这不应该花费任何时间接近 24 小时..
-
-
@Nick ...这正是我所说的......他们回答......“如果你能做得更快,那就去吧!”
-
凭借我有限的(基本查询/更新和删除)sql 知识 - 我将运行大量 SQL 查询来提取数据,然后在 PHP 中处理它们 - 但我确信有一个在(也许?)1/2 查询中获取所有数据的更有效方式?