在特定表的某个时间检索所有行的值

时间:2013-04-27 06:51:54

标签: php sql

我正在为办公室做一个考勤管理系统项目,其中还包括休假管理系统。有一个报告显示了显示员工缺席/现在报告的页面。现在,如果特定员工在休假日缺席,我必须显示in leave报告,而不是absent报告,这些休假日期根据他的休假申请确定,并存储在数据库中,并带有应用的休假日期。我创建了一个leave表,其中存储了有关leave的所有相关信息。这是我的leave表..

lid     empname     username    nod       sdate        edate       reason  action  empID 
===     =======     ========    ===     ==========  ===========    ======  ====== =======
 1      Maxwell       max        1      2013/04/09  2013/04/09      xam   Denied    3
 2      Sukant        suk        1      2013/03/11  2013/03/11      xam   Denied    4
 3      Sukant        suk        1      2013/02/20  2013/02/20      xam   Accepted  4
 4      Taylor        tay        1      2013/05/23  2013/05/23      xam   Accepted  1
 5      Sukant        suk        1      2013/05/23  2013/05/23      xam   Accepted  4

问题是我无法一次获取leave表的所有行。但我必须获取leave表格的所有行,以检查所有sdateedate以及action以显示报告in leave或{{1}在我的报告页面中。我编写了以下代码,但它只获取absent表的第一行或单行。它将在报告中显示leave(如果已接受)报告,该报告仅显示其正在获取的行的页面。

in leave

sql查询是 <?php $leave = mysql_query("SELECT `action` FROM `leave` where uname =('SELECT `username` FROM `users` where `empID` =$user')", $dbCon) or die(mysql_error()); $sql = "SELECT * FROM `office_date` WHERE year='$year' AND month = '$month' ORDER BY odate DESC "; $query = mysql_query($sql, $dbCon); $leave_row = mysql_fetch_array($leave); $i = 1; while ($row2 = mysql_fetch_object($query)){ if(....) { //some code here } else if ($leave_row[7] == "accepted" && $leave_row[4] == $row2->odate) { echo '<tr bgcolor="' . $bgcolor . '"> <td>&nbsp;' . $i . '</td> <td>&nbsp;' . $row2->odate . '</td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <td><font color="red">In leave</font></td> </tr>'; } else { echo '<tr bgcolor="' . $bgcolor . '"> <td>&nbsp;' . $i . '</td> <td>&nbsp;' . $row2->odate . '</td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <td><font color="red">Absent</font></td> </tr>'; } $i++; } ?> 离开SELECT * FROM应该只获取where empID = $user表的一行吗?

我的if条件只检查一行的信息。我知道原因:查询 $ leave = mysql_query(“SELECT * FROM leave其中empID = $ user”); 仅提取一行。我如何获取所有行以及应该使用php代码代替我的代码的leave语句来一次获取或检查所有行?

2 个答案:

答案 0 :(得分:0)

这是因为您只从第一个查询中获取一行,您需要循环以检索所需的所有行

$leave_row = mysql_fetch_array($leave);

应该是

while($leave_row = mysql_fetch_array($leave)) { .... }

答案 1 :(得分:0)

您的原始代码

       $leave = mysql_query("SELECT `action` FROM  `leave` 
                        where uname =('SELECT `username` FROM `users` 
                        where `empID` =$user')", $dbCon) 
                        or die(mysql_error());

一个问题是您需要从子查询中删除'标记,如下所示:

       $leave = mysql_query("SELECT `action` FROM  `leave` 
                        where uname =(SELECT `username` FROM `users` 
                        where `empID` =$user)", $dbCon) 
                        or die(mysql_error());

假设有效,你可以尝试一下,看看会发生什么?

<?php
        $leave_query = mysql_query("SELECT `action` FROM  `leave` 
                        where uname =(SELECT `username` FROM `users` 
                        where `empID` =$user)", $dbCon) 
                        or die(mysql_error());
        $office_date_query = mysql_query("SELECT * FROM `office_date` 
        WHERE year='$year' 
        AND month = '$month' ORDER BY odate DESC", $dbCon)
                        or die(mysql_error());

        // Not sure if we want this to be a 1 or a 0...
        $i = 1;

        while ($office_date_query_results = mysql_fetch_object($office_date_query)){ 
          $office_date_results[] = $office_date_query_results;
        }

        while ($leave_query_results = mysql_fetch_array($leave_query)){ 
          $leave_row[] = $leave_query_results;
        }

        for ($x = 0; $x < count($leave_row); $x++) {

          foreach ($office_date_results as $row2) {

            if (....) {
               //some code here
            } 

            else if ($leave_row[$x][7] == "accepted" && $leave_row[$x][4]  == $row2->odate) {
              echo '<tr bgcolor="' . $bgcolor . '">
              <td>&nbsp;' . $i . '</td>
              <td>&nbsp;' . $row2->odate . '</td>
              <td>&nbsp;</td>
              <td>&nbsp;</td>
              <td>&nbsp;</td>
              <td>&nbsp;</td>
              <td><font color="red">In leave</font></td>
              </tr>';
            }

            else {
              echo '<tr bgcolor="' . $bgcolor . '">
               <td>&nbsp;' . $i . '</td>
               <td>&nbsp;' . $row2->odate . '</td>
               <td>&nbsp;</td>
               <td>&nbsp;</td>
               <td>&nbsp;</td>
               <td>&nbsp;</td>
               <td><font color="red">Absent</font></td>
             </tr>';
            }

            $i++;
          }
        }

        ?>