根据日期范围从MySQL中提取数据

时间:2018-01-03 23:43:44

标签: php mysql

我正在开发一个系统,我需要从MySql数据库中提取不同日期范围的数据。目前,我有一个从数组动态填充的选择下拉列表。我想要实现的目标"干净利落"当用户点击一个月时,它会使用该特定月份中的给定数据填充表格。虽然我实际上实现了这一点,但它需要在每个选定的月份执行查询。我想知道是否有一种更清洁的方式来解决这个问题。我已经对这个问题进行了一些研究,但由于我是PHP的新手,现在只是在程序上而且没有太多OOP,我还没有找到更多的附加信息,并希望得到一些输入。到目前为止,这是我的代码。谢谢大家的帮助。如果需要其他信息,请告诉我。

这也将改为准备好的陈述。

<form action="" method="post">
        <select name='months' >
            <option value='default'>Select a month</option>
      <?php
          $months = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November", "December");

          foreach($months as $currentMonth) {
             ?> 
             <option value=<?php echo $currentMonth; ?>><?php echo $currentMonth; ?></option>;
             <?php 
          }

        ?>

        </select>
        <button class='btn btn-primary' type="submit" name="submitMonth">submit</button>
    </form>


    <table class="table table-hover">
        <thead>
            <tr>
                <th>Sales Rep</th>
                <th>Rep ID</th>
                <th>Business Name</th>
                <th>Package</th>
                <th>Status</th>
                <th>Date Submitted</th>
            </tr>
        </thead>

     <?php   

        if(isset($_SESSION['user_id'])) {

        $user_id = $_SESSION['user_id'];

        if(isset($_POST['submitMonth'])) {
            if($_POST['months'] == 'January') {

         $query = "SELECT *
                  FROM table
                  WHERE MONTH(date) = 1 AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";
                  $result = mysqli_query($connection, $query);
            }

        if($_POST['months'] == 'February') {

            $query = "SELECT *
                  FROM table
                  WHERE MONTH(date) = 2 AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";
                  $result = mysqli_query($connection, $query);
            }

        }


        while($row = mysqli_fetch_assoc($result)) {

        $referalBus= $row['business'];
        $repId = $row['id'];
        $package = $row['pack'];
        $status = $row['status'];
        $date = $row['date'];

         if(mysqli_num_rows($result) > 0) {

            echo "<tr>";
            echo "<td></td>";
            echo "<td>$repId</td>";
            echo "<td>$referalBus</td>";
            echo "<td>$package</td>";
             echo "<td>$status</td>";
              echo "<td>$date</td>";

        }
      } 
    }

    ?>
    </table> 

5 个答案:

答案 0 :(得分:0)

您可以将其更改为直接使用参数:

$query = "SELECT *
        FROM table
        WHERE DATE_FORMAT(date, '%M') = ".$_POST['months']." AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";

答案 1 :(得分:0)

您不必每个月手动创建一个IF语句。你可以使用Mysql的DATE_FORMAT()函数。

 if(isset($_POST['submitMonth'])) {
          $query = "SELECT *
                  FROM table
                  WHERE DATE_FORMAT(date, "%M")  = '".$_POST['months']."' AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";
                  $result = mysqli_query($connection, $query);
        }

答案 2 :(得分:0)

我建议动态构建您的查询条件列表;像(伪代码):

query = "blah blah WHERE YEAR(`date`) = YEAR(NOW()) AND MONTH(`date`) IN ("
for each month
   query.append("month's number") //Actually, need some "when to comma" logic here too
query.append(")");

我对php的认识几乎局限于我看到的人在这里发布的内容;但我认为甚至可能有一些&#34;爆炸&#34;你可以用来代替循环的方法。

答案 3 :(得分:0)

假设您无法更改数据库结构,我将在每个月应用每个选项中的数字值

 for(var $i=0; $i<=$months.length; $i++ ) {
 ?> 
       <option value=<? echo '$i+1' ?>><?php echo $months[$i]; ?></option>;
 <?php 
 }
?>

然后简单查询看起来像

$query = "SELECT * FROM table WHERE MONTH(date) = ". $_POST['months'] ." AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";

$result = mysqli_query($connection, $query);

}

答案 4 :(得分:0)

好的,所以我找到了一些东西并且有效。感谢所有反馈人员。以下是与预准备语句一起使用的代码。

 <form action="" method="post">
                    <select name='months' >
                        <option value='default'>Select a month</option>

                  <?php

                      $months = array("", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November", "December");

                         for($i=0; $i <= count($months); $i++ ) {
                         ?> 
                               <option value=<? echo $i ?>><?php echo $months[$i]; ?></option>;

                         <?php 

                         }
                        ?>

                       </select>
                      <button class='btn btn-primary' type="submit" name="submitMonth">submit</button>

                </form> 

                <table class="table table-hover">
                    <thead>
                        <tr>
                            <th>Sales Rep</th>
                             <th>Rep ID</th>
                              <th>Business Name</th>
                               <th>Package</th>
                               <th>Status</th>
                                <th>Date Submitted</th>
                        </tr>

                    </thead>

                 <?php   

                    if(isset($_SESSION['user_id'])) {

                    $user_id = $_SESSION['user_id'];

                   if(isset($_POST['submitMonth'])) {

                      $stmt = mysqli_prepare($connection, "SELECT id, name, business, phone, email, status, id, date, package
                                                            FROM table
                                                            WHERE MONTH(date) = ". $_POST['months'] ." AND YEAR(date) = YEAR(NOW()) && user_id = ?");
                      mysqli_stmt_bind_param($stmt, 's', $user_id);
                      mysqli_stmt_execute($stmt);
                      mysqli_stmt_bind_result($stmt, $user_id, $name, $business, $phone, $email, $status, $id, $date, $package);
                      mysqli_stmt_store_result($stmt);

                   while(mysqli_stmt_fetch($stmt)) {

                    if(mysqli_stmt_num_rows($stmt) > 0) {

                        echo "<tr>";
                        echo "<td></td>";
                        echo "<td>$id</td>";
                        echo "<td>$business</td>";
                        echo "<td>$package</td>";
                         echo "<td>$status</td>";
                          echo "<td>$date</td>";

                      }
                    } 
                   }
                 }

                  ?>
                    </table>