2012-01-15 36 views
4

當我設置表時,我可能會以錯誤的方式執行此操作嗎? 我正在使用mysql & php。 googleing的負載只顯示瞭如何計算一個值出現在多行中的次數,我想檢查許多不同列中的值,但是在相同的記錄中。 (我認爲這個:count number of columns that have data for each row只是可能是一樣的東西,也許?但我不明白。)計算* 1 *行/記錄中不同列中值的出現次數

我有一張表,希望我的目標是實現並實現每一天。所以我每天都想標誌:「成功」或「失敗」。插入工作很好。我怎麼一直在尋找一種方法來計算成功的數量&「今天」的失敗次數,以顯示正確的笑臉類型,這將根據失敗次數和成功次數而令人鼓舞或悲傷。

例如:

ID date   drinkMoreWater goToBedEarlier callADearFriend 
1 2012 jan 15 fail    fail    fail 
1 2012 jan 16 success   _(still empty) success 

所以,如果今天是1月15日的笑臉會非常非常難過。 如果今天是1月16日,笑臉將會真正與它的眼睛中的星星一樣興奮(至少我失敗了目標2;))

+0

您需要計算多少列,並且是否修正了一組列? – 2012-01-15 15:31:01

+0

您只需將兩個數組中的所有date&drinkMoreWater轉換爲您的PHP代碼,即可比較兩個數組。你有沒有試過這種方式? – 2012-01-15 15:33:14

回答

9

你的表實際上應不同的結構建議,使您的生活更輕鬆:

Goals: 
ID  Goal 
1  drinkMoreWater 
2  goToBedEarly 
3  callADearFriend 

Status: 
ID  Status 
1  Success 
2  Fail 

Tracking: 
ID  Date  Goal_ID  Status_ID 
1  1/1/2012 1   1 
1  1/1/2012 3   2 
1  1/2/2012 2   1 
1  1/2/2012 4   1 

現在,你可以輕鬆地添加的目標和狀態(例如'處理它'),並且您的表結構不必更改以適應您的更改,您的查詢也變得更簡單。

+0

即將發佈相同內容,因此對此版本+1。唯一需要注意的是,如果您查看當前值('fail' /'success' /'NULL') – 2012-01-15 15:39:31

+0

+1,那麼'Status'比'Goals'少需要,以指向更好的設計。 – 2012-01-15 15:41:34

+0

@TheNail也許這是一個過度殺,但讀了我的評論,你可能會看到,它可能最終會變得有用 – 2012-01-15 15:41:49

0

如果你想在SQL中這樣做,你可以使用類似三元的構造,這樣的:

SELECT *, 
     (CASE drinkMoreWater WHEN 'success' THEN 1 ELSE 0 END) 
    + (CASE goToBedEarlier WHEN 'success' THEN 1 ELSE 0 END) 
    + (CASE callADearFriend WHEN 'success' THEN 1 ELSE 0 END) 
    AS numberOfSuccesses 
FROM yourTable 
0

你可以做這樣的事情:

Select case when sub.smilies = 0 then "very very sad" else 
      case when sub.smilies = 1 then "sad" else "hubby" end 
     end as "Number of Smilies" 
from 
(
    Select case when t.drinkMoreWater = "fail" then 0 else 1 end + 
      case when t.goToBedEarlier = "fail" then 0 else 1 end + 
      case when t.callADearFriend = "fail" then 0 else 1 end as smilies 
    from yourTableName t 
    where date = @date 
) sub 

您將需要處理的空字符串,以及解決這些case語句。 該解決方案是當前的設計,但你最好還是考慮重新設計由@BassamMehanni 's answer

+0

爲什麼嵌套選擇?內在的一個會自己做。 – 2012-01-15 15:36:07

+0

@TedHopp,我添加了外層select來包含外層語句,使其更具可讀性 – 2012-01-15 15:40:41

+0

我試了一下,但我一定做了錯誤,重新設計正在進行中! – Alisso 2012-01-15 22:37:40