我正在研究一些與創建定期發票有關的php代碼。我需要一些幫助來思考邏輯。我想最終我會得到一種Insert/Select語句。最終生成的php代碼將在夜間cron中運行。插入選擇語句,對字段和邏輯思維進行更改
首先,讓我向您展示一些我的表格項目以供參考,並解釋一下他們的工作。該表被稱爲發票,並且還有其他表與其相關聯,但我認爲如果我現在可以指定這個表的邏輯,我可以將它應用於其他表。
ID =這是自動遞增的主鍵,也恰好是發票號碼。
recurring =這是發票是一次還是反覆發生。 O =一次,M =每月等
recurred =這將在插入時設置爲N,並且是我用來查看錶中創建的下一個循環發票是否應基於此的邏輯發票與否。當新的循環發票被插入到表中時,這將被更改爲Y,以便不再由cron作業處理它。
date =這是發票被插入/創建的日期。例如,如果發票的創建日期是本月15日,則下一個發票將是下個月的15日。基本上M代表每月。然而,我還沒有想出如何處理31日的創建日期,但下個月只有30天,可以在這裏使用一些幫助。
所以這裏是我的邏輯。首先,我運行查詢以查找不在o所有的行和復發= N.
$result = mysql_query("SELECT * FROM invoice WHERE recurring != 'O' and recurred
= 'N'「)或死亡(mysql_error());
接着,我在每個工作那種每月,Q季報等經常性的M ..
if recurring = M
if todays date day = 'date' day
copy line item into a new row with the following changes: new ID, todays date, and mark the recurred to N for the new insert (will mark the old one Y)
顯然是不實際的代碼,只是我在想什麼的。
所以我的問題是:1)如何創建插入選擇語句來處理chang ed變量和2.)如何處理髮票在一個月的31日創建並且下一個月只有30天(或28)的日期。
謝謝,我會試試看。不知道什麼枚舉與布爾值意味着什麼。你能詳細說明嗎? – Tom 2013-04-10 21:08:59
Avetis,我將不得不計算每月(M)季度(Q)半年一次(S)年度(A)的計算。你是否推薦我爲每種類型運行這個查詢,因爲你添加了diff> = 30?或者我應該運行一次,並得到一切,並與if語句排除? – Tom 2013-04-10 21:19:46
關於enum和boolean,你使用字母O,Y,N,M作爲「字符串」來標識事物,這對數據庫不利,你應該根據邏輯改變類型,所以如果你需要yes/no如果你有幾個選項,比如monthly/quarterlu/daily,那麼字段類型應該是enum,在那裏你可以有確切的名字枚舉(每日,每月.eg),它將全部都是布爾(真/假)工作效率更高。 – 2013-04-10 21:46:20