2

我的情况如下:

我正在建立一个发票系统,我几乎完成了所有工作,除了发票重复。这是我试图做的但没有成功。

条件:

我生成新的重复收据的条件是 ->

  1. 合同必须有效。
  2. 参考必须等于 PA。
  3. 只为还没有发票的合同生成发票。(怎么查)

我将使用 cron 运行脚本,它将每天运行,然后如果合同没有发票,我将每天生成发票。如果合同有该日期的发票,则什么也不做 - 退出。

在这里,我有一段 SQL 代码,我正在检索到该日期(现在是月份和年份)有发票的每个人。

一些有用的信息:

我有324 个有效合同,其中已在以下查询中生成发票。

SELECT contratos.id, contratos.idcliente, contratos.ativo, invoices.id as inv, invoices.due_date, invoices.contratoid 
FROM contratos 
LEFT JOIN invoices ON invoices.contratoid = contratos.id 
WHERE contratos.ativo = 1 
AND invoices.referencia = 'PA' 
AND YEAR(due_date) = YEAR(CURDATE()) 
AND MONTH(due_date) = MONTH(CURDATE()) 
GROUP BY invoices.id

在另一个查询中,我有368 个有效合同。

SELECT * FROM contracts WHERE active=1

然后我知道我有 44 份没有发票的合同,并且我知道我需要为 44 份合同生成新的发票。

我的问题是如何检索这 44 份合同并在我的第一个查询中显示它,它可以为空(没问题),对我来说很重要的 id 是合同 ID。

如果我不够清楚,请告诉我。

感谢社区。

[编辑]总结

  • 我运行我的第一个查询并得到 324 行的结果。
  • 然后运行第二个查询并比较query1和query2的结果
  • 不匹配的行是差异,我需要为他们生成发票。

我真的很想在我的查询(一个查询)中而不是在我的代码中这样做。

4

1 回答 1

2

LEFT JOIN 正在返回填充了所有 NULL 值的发票记录。当您要求 invoices.referencia = 'PA' 时,这将消除所有完全为空的记录(否定您的外部联接)。

于 2011-07-14T18:12:07.863 回答