Php 每日定期发票检查

Php 每日定期发票检查,php,mysql,invoice,invoices,Php,Mysql,Invoice,Invoices,我的情况如下: 我正在建立一个发票系统,我几乎做了所有的事情,除了发票。这就是我试图做的但没有成功的事情 条件: 我生成新的重复incoice的条件是-> 合同必须是有效的 参考值必须等于PA 仅为尚未生成发票的合同生成发票。(如何检查) 我将使用cron运行脚本,它将每天运行,然后如果合同没有发票,我将每天生成发票。 如果合同有此日期的发票,则不执行任何操作-退出 在这里,我有一段SQL代码,我正在检索到目前为止所有有发票的人(现在是月份和年份) 一些有用的信息: 我有324份有效合同,其中发

我的情况如下:

我正在建立一个发票系统,我几乎做了所有的事情,除了发票。这就是我试图做的但没有成功的事情

条件:

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

  • 合同必须是有效的
  • 参考值必须等于PA
  • 仅为尚未生成发票的合同生成发票。(如何检查)
  • 我将使用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份合同并在第一次查询中显示它,它可以是null(没问题),对我来说很重要的id是合同id

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

    感谢社区。

    [已编辑] 摘要

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

    我真的希望在我的查询(一个查询)中这样做,而不是在我的代码中

    左联接返回填写了所有空值的发票记录。当您需要invoices.referencea to='PA'时,这将消除所有完全为空的记录(否定您的外部联接)。

    invoices.contractoid=contractos.id上的左联接发票不返回没有合同的44个合同的空值,我做错了什么?但我真的需要通过PA过滤,而不需要这些草稿。等于包裹、配额等的PA。。我试着重新打开PA行,它返回给我377,'因为它包含了草稿。这确实是一个黑客行为,但您可以在where子句中使用IFNULL为invoices.referencea提供默认值。因此,该子句看起来像'AND IFNULL(invoices.referencea,'PA')='PA'。在这里不起作用,它返回与前面相同的结果。我想将actives合同与查询1的结果进行比较。但我想在一个唯一的查询中而不是在我的代码中执行。发票表中的“到期日”列是吗?如果是这样的话,你也得用IFNULL来做同样的把戏。哦!我明白了,是的,发票表上有到期日一栏。我要重复这个把戏。谢谢