2016-12-23 21 views
1

我目前正在考勤网站。考勤数据存储这样的...如何使用PHP获取SQL表中所有整数的总和?

+-----------------------------------------------+ 
| Name | 12/20/16 | 12/21/16 | 12/23/16 | 
+-----------------------------------------------+ 
|Person1 | 1   | 0   | 1   | 
|Person2 | 0   | 1   | 0   | 
|Person3 | 1   | 1   | 1   | 
+-----------------------------------------------+ 

如果一个人在那里,然后他们行日期列被标记为“1”。如果他们不在那里,那么他们行的日期列被标记为“0”。

我想让他们读出他们有多少天。

如何获取PHP中特定人员行的日期列中所有值的总和?

编辑:我知道这是格式化数据的不好方法。这是每个业主的要求。他们有自己的想法,不会听任何理由。他们将SQL视为Excel文件。

+1

这是录制考勤的一种可怕的方式。重构您的数据库,并为出席的日期(即人员表和考勤表)使用单独的表格。这也将使您的查询更容易。阅读https://code.tutsplus.com/tutorials/relational-databases-for-dummies--net-30244 – RiggsFolly

+0

问题在于你的数据。日期不应该在列中。数据库不是电子表格。日期应该是行。 – e4c5

+0

我知道这是格式化数据的不好方法。这是每个业主的要求。他们有自己的想法,不会听任何理由。他们将SQL视为Excel文件。 –

回答

0

好的,在评论中有些人的帮助下,我完成了一个工作函数来完成我所需要的工作。

$ppl = mysqli_query($conn, "SELECT * FROM Attendance2016 WHERE name = '" . getSessionVal("Name") . "'"); 
$row = mysqli_fetch_array($ppl); 
$loopMax = count($row); 

$currentAtttendance = 0; 

for($x = 0; $x < $loopMax; $x++){ 
    if($row[$x] === "0"){ 
     continue; 
    }else if($row[$x] === "1"){ 
     $currentAtttendance = $currentAtttendance + 1; 
    } 
} 

return $currentAtttendance; 
0

因为你不能重构数据库来做到这一点的唯一方法是

SELECT name, `12/20/16`+`12/21/16`+`12/23/16` as days_attended 
FROM tablename 

是的每次添加,你必须改变你的查询中的列。

您可以进行动态查询 - 将上述内容用作模板,查看动态查询的样子。

但你真的应该重构数据库,并为你的用户做一个查看让他们开心。

这正是为什么观点存在。

+0

'SELECT * FROM tablename'并记住第一列是名称,其余是日期,然后在查询中不需要更改。但是,是的,他们将不得不限制一年创建表格的数量或类似的东西,其他方面随着时间的推移表格会增长......(+ - 每月30列) –

相关问题