2009-12-09 29 views
0

我有一個以「兌換碼」(架構:ID, NAME, USES, CODE)的思想工作的應用程序。和例子是"32, Stack Overflow, 75, 75%67-15hyh"PHP/DB模式的問題

因此,此代碼提供給SO社區,讓我們說,它有75個贖回。您通過輸入一些運輸信息和代碼進行兌換。輸入,此檢查預製:

if (code exists){ 
    if (count_entries_where_code=$code < $uses_set_at_creation){ 
     //enter information into DB for processing 
    { 
    //echo "sorry, not a real code" 
} 

於是總使用次數是硬編碼,但與SQL查詢(count_results from entry_data WHERE code=$code)產生贖回的電流#。這部分工作正常,但這裏的問題是:

視圖 頁面,在這裏我管理的代碼,我有基本的設置(在僞PHP,與分隔成一個MVC設置真正的代碼):

$results = "SELECT * FROM codes"; 
foreach ($result as $code){ 
    echo $code->code; 
    echo $code->name; 
    //etc. It's actually all in a nice HTML table. 
} 

所以我想列出一個列「剩餘代碼的使用#」。如果像這樣的東西被存儲在數據庫中,並且這樣繪製出來?使用foreach循環來生成會更容易,但我通常不喜歡存儲這樣的「生成」統計信息。有沒有一種巧妙的方法將這些結果放到使用foreach循環創建的表格的正確行上?

(我很好的代碼,所以我並不需要一個工作/偉大的語法例子,只是一個模式的解釋可能適合這個問題,也許這樣的事情一個共同的設計討論。上午我有權避免存儲可生成的數據,如剩餘使用數量等等)

+0

等待第二個。你剛剛說過你在* view *中擁有該代碼嗎? – Franz 2009-12-09 22:13:41

+0

請放心,這實際上是我的模型和視圖的精簡版。我使用CodeIgniter,事情分開得很好。不過謝謝你的關注,如果這些都是「觀點」,我也會關心。 – 2009-12-09 22:16:32

+0

哦,很好。謝謝,你救了我的傍晚;) – Franz 2009-12-09 22:19:47

回答

0

閱讀您的問題,我說的對,以避免像存儲用途#生成,能留下的數據?

是的,你是正確的,以不存儲計算值。
計算邏輯可以改變,並與存儲的計算值的工作,以進行反向工程也可以是一個惡夢 - 如果有可能在一些情況下在所有。

這聽起來像你想合併這兩個查詢:

SELECT c.id, 
     c.name, 
     c.uses, 
     c.code, 
     x.num_used 
    FROM CODES c 
    JOIN (SELECT ed.code, 
       COUNT(*) 'num_used' 
      FROM ENTRY_DATA ed 
     GROUP BY ed.code) x ON x.code = c.code 
0

當您運行查詢以獲取頁面的代碼時,請添加子查詢以從entry_data表中獲取已使用代碼的數量。

select codes.id, codes.name, codes.uses, codes.code (select count(code) from entry_data where entry_data.code=codes.code) as used_codes 

Id使用code_id作爲外鍵而不是代碼。

這一切都是假設我正在正確