当我设置表格时,我可能会以错误的方式执行此操作? 我正在使用mysql& PHP。 googleing的负载仅显示如何计算值在多行中出现的次数,我想检查许多不同列中的值,但是在同一记录中。 (我认为:count number of columns that have data for each row也许可能是同一件事,也许?但我不明白。)
我有一个目标表,我希望每天都能实现目标。因此,我希望每天都能标记:"成功"或"失败"。插入工作很棒。我怎么想找到一种方法来计算成功的数量&今天"失败的次数,以显示正确的笑脸,这将是令人鼓舞或悲伤的,取决于失败次数和成功次数。
例如:
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 :(得分: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
现在您可以轻松添加目标和状态(例如“正在处理它”),并且您的表格结构不必更改以适应您的更改,您的查询也会变得更加简单。
答案 1 :(得分: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
答案 2 :(得分: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
建议的重新设计