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を識別するために重要です。

よくわからない場合はお知らせください。

コミュニティに感謝します。

[編集]まとめ

  • 最初のクエリを実行すると、324行の結果が得られました。
  • 次に、2番目のクエリを実行し、query1とquery2の結果を比較します。
  • 一致しない行が違いであり、それらに請求書を生成する必要があります。

コードではなく、クエリ(1つのクエリ)でこれを実行したいと思います。

4

1 に答える 1

2

LEFT JOIN は、すべて NULL 値で満たされている請求書レコードを返しています。Invoices.referencia to = 'PA' が必要な場合は、完全に null であるすべてのレコードが削除されます (外部結合が無効になります)。

于 2011-07-14T18:12:07.863 に答える