在Mysql中是否可以计算给定id上具有值的列数

时间:2014-12-18 23:25:44

标签: mysql mysqli

我搜索了很多,但无法找到针对此特定问题的任何解决方案。我有一个表名header,结构看起来像这样(带有一些示例值)

 id   name     choice1     choice2    choice3    choice4     choice5

 1    AAA      Book        Movie      Fishing    
 2    XXX      Music       Dine       Dancing    Flirting
 3    CCC      Food        Music      Pub Night

我需要知道填充了值的列数。因此,对于id 1,我想获得5id 2,我想获得{{1} }}

我该怎么做?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用条件表达式执行此操作:

select t.*,
       ((id is not null) + (name is not null) + (choice1 is not null) + (choice2 is not null) +
        (choice3 is not null) + (choice4 is not null) + (choice5 is not null)
       ) as NumColumnsWithValues
from table t;

MySQL将布尔表达式视为数字上下文中的整数,使用" true"是1和"假"为0.只需添加结果即可获得所需的值。在其他数据库中,您需要使用case语句。

答案 1 :(得分:1)

更好的数据库设计是拥有一个名称表和一个选择表。然后你可以做类似的事情:

SELECT n.id, COUNT(c.id)
FROM n
JOIN c ON c.uid = n.id

该术语是数据库规范化'现在一点点阅读将为你节省几天的痛苦。