查找具有相同值的列数

时间:2018-02-12 20:44:55

标签: php mysql

+-----+-----+----+----+----+----+----+----+
| Uid | Q1 |  Q2 | Q3 | Q4 | Q5 | Q6 | Q7 |
+=====+=====+====+====+====+====+====+====+
|  1  |  1  |  0 |  1 |  0 | 1  |  1 |  0 |
+-----+-----+----+----+----+----+----+----+

这是我的数据库的结构。我想获取uid = $_SESSION['Uid']的列数。 我想要Q1, Q2, Q5, Q7之间存在0的列数 像这样的东西,(不是一个只供参考的查询)

$Uid = $_SESSION['Uid'];
$result = mysql_query("SELECT Q1, Q2, Q5, Q7 FROM userdata WHERE Uid = '$Uid' && have 0");
echo mysql_num_fields($result);

所以它会返回2 或者这可以通过使用计数功能来解决。 或者,在为该特定用户选择所有字段后,我应该如何转换或创建这样的新表?

+----+----+
|  Q |  A |
+====+====+
| Q1 |  1 |
+====+====+
| Q2 |  0 |
+====+====+
| Q3 |  1 |
+====+====+
| Q4 |  0 |
+====+====+
| Q5 |  1 |
+====+====+
| Q6 |  1 |
+====+====+
| Q7 |  0 |
+====+====+

3 个答案:

答案 0 :(得分:1)

您可以将IF

的结果相加
SELECT IF(Q1=0,1,0) + IF(Q2=0,1,0) + IF(Q5=0,1,0) + IF(Q7=0,1,0) as total
FROM userdata WHERE Uid = '$Uid';

输出:

+-------+
| total |
+-------+
|     2 |
+-------+

答案 1 :(得分:0)

您应该检查每个字段是否为0

SELECT Q1, Q2, Q5, Q7 
FROM userdata WHERE Uid = '$Uid' AND (Q1=0 OR Q2=0 OR Q5=0 OR Q7=0)

答案 2 :(得分:-1)

您可以对您的表进行UNPIVOT并进行查询。

this link描述了mysql中的univoting。如果您的表列是动态的和/或您需要生成复杂的报告,这将非常有用。