2011-07-14 78 views
2

我的情況如下:每日復發發票支票

我正在建立一個發票系統,除發票重複發票外,我幾乎做了所有工作。這是我試圖做的沒有成功。

條件:

我的條件,產生新的復發incoice是 - >

  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個合同新invocies。

我的問題是我如何檢索這44個合同,並在我的第一個查詢中顯示它,它可以是一個空(沒問題),對我來說重要的是合同ID。

如果我不夠清楚,請讓我知道。

Thanks Community。

將帖子 摘要

  • 我跑我的第一個查詢,得到了324線的結果。
  • 然後運行第二個查詢並比較查詢1和查詢2的結果
  • 不匹配的行是差異,我需要爲它們生成 發票。

我真的想這樣做在我的查詢(一個查詢),而不是在我的代碼。

+0

LEFT JOIN發票ON invoices.contratoid = contratos.id不返回沒有合同的44合同的空值,我做錯了什麼? – B4NZ41

回答

2

LEFT JOIN正在返回正在填充所有NULL值的發票記錄。當您要求invoices.referencia ='PA'時,這將消除所有完全爲空的記錄(否定外部聯接)。

+0

但我真的需要通過PA過濾沒有這個草稿來。 PA等於包裹,配額等。我試着重新劃線PA,它回到了我377,「因爲它包括了草稿。 – B4NZ41

+0

這真是*黑客,但您可以讓我們IFNULL爲您的where子句中的invoices.referencia提供默認值。因此該條款看起來像'AND IFNULL(invoices.referencia,'PA')='PA'。 – scwagner

+0

在這裏不起作用,它返回與以前相同的結果。我想比較活動合同與查詢1的結果。但我想在一個獨特的查詢中做到這一點,而不是在我的代碼中。 – B4NZ41