希望我能在不写书的情况下做到这一点......我正在为一家测量公司工作。他们还投入了一个会计部门,其中一个功能是找到没有完全还清的工作。
要点几点:
以下是适用的数据库结构:
table jobs: job_id, client_id
table job_types: type_id, type_name
table job_type_assoc: id_job, type_id, price
table payments: payment_id, job_id, amount
注意:不是对每种工作类型进行付款,而是对整个工作进行付款(再次,与客户的帐户有“余额”)相反。
我需要以某种方式拉取price
中job_type_assoc
的总数小于amount
中payments
总数的工作。
我不知道单独使用mysql是否可行,或者php是否更有效 - 而且,他们的旧系统中有大约340,000个作业。当然,他们不会有会计信息,他们确实有很多工作,新的条目会很快建立起来,如果我在PHP中以某种方式做到这一点,我最终会查询作业表,它可能会得到很多凌乱。
答案 0 :(得分:2)
一种可行的方法是使用子查询的巧妙组合。
select * from
(select job_id,
(select ifnull(sum(job_type_assoc.price),0) from job_type_assoc
where jobs.job_id = job_type_assoc.id_job) as amount_due,
(select ifnull(sum(payments.amount),0) from payments
where jobs.job_id = payments.job_id) as payments
from jobs) as outstanding
where payments< amount_due;
如果您正确编制了job_type_assoc和付款索引,那么运行查询应该不会太糟糕。
请注意,我尚未测试此确切查询,因此可能需要进行调整。我对本地数据库中的表运行相同的查询。