使用MySQL数据库在PHP中的日期范围报告

时间:2014-03-27 21:06:22

标签: php mysql sql

我正在努力实现与此问题相似的事情 - link。我需要在日期范围内使用数据库中的多个变量生成PHP报告。

这是我到目前为止所拥有的:

这是我的javascript:

<script type="text/javascript">
      $(function(){
        $("#date_range").submit(function(){
          $.ajax({
            type:"POST",
            url:".weekly_concession.php?" + new Date().getTime(),
            dataType:"text",
            data:$(this).serialize(),
            beforeSend:function(){
              $("#loading").show();
            },
            success:function(response){
                $("#report_result").append(response);
                $("#loading").hide();
            } 
          })
          return false;
        });
    });
    </script>

我的数据范围

<div align="center">
<form name="date_range" id="date_range" method="post" style="width: 454px" >
<fieldset>
<legend>Start Date : </legend>
<input type="text" value="" placeholder="YYYY-MM-DD" name="start" id="datepicker"/>
<legend>End Date : </legend>
<input type="text" value="" placeholder="YYYY-MM-DD" name="end" id="datepicker2"/>
<button class="btn btn-inverse" type="submit" name="click" >
<i class="icon icon-print icon-white"></i> 
Run Report</button>
</fieldset>
</form></div>
<br><br>

我的结果表

<div align="center">
  <table id="date_range" width="100%" cellspacing="0" cellpadding="10">
    <tr>
      <td align="center"><table width="300" cellpadding="4" cellspacing="0" class="product_box">
        <tr>
          <td align="center" bgcolor="#EAF0FF" class="column-light">&nbsp;</td>
          <td align="center" bgcolor="#EAF0FF" class="column-light"><strong> Sales: </strong></td>
          <td align="center" bgcolor="#EAF0FF" class="column-light"><strong>Sale Price Total:</strong></td>
          <td align="center" bgcolor="#EAF0FF" class="column-light"><strong>Cost Price Total:</strong></td>
          <td align="center" bgcolor="#EAF0FF" class="column-light"><strong>Margin:</strong></td>
              </tr>
        <tr>
      <td align="center" class="column-light"><img src="images/spacer.png" width="140" height="1" /></td>
          <td align="center" class="column-light"><img src="images/spacer.png" width="110" height="1" /></td>
          <td align="center" class="column-light"><img src="images/spacer.png" width="110" height="1" /></td>
          <td align="center" class="column-light"><img src="images/spacer.png" width="110" height="1" /></td>
          <td align="center" class="column-light"><img src="images/spacer.png" width="110" height="1" /></td>
           </tr>
        <tr>
          <td align="center" bgcolor="#F5F5F5" class="column-light"><strong>Bawtry</strong></td>
          <td align="center" bgcolor="#F5F5F5" class="column-light"><strong>

许多SELECT语句之一:

$sql="SELECT * FROM shop_orders WHERE 
shop_order_day AND shop_order_month AND shop_order_year BETWEEN 'start' and 'end' AND shop_order_action = 'Sale' AND shop_order_location = 'Bawtry' AND shop_order_field_to_update LIKE '%con%' ORDER BY shop_order_id DESC ";

$result=mysql_query($sql);
$bawtry_sales = mysql_num_rows($result);
echo $bawtry_sales ?>
          </strong></td>
          <td align="center" bgcolor="#F5F5F5" class="column-light"><?php

...

我在完成这项工作时遇到问题,以便我可以使用上述表格中选择的日期,即2014-03-09 - 2014-03-16,在shop_order_day,shop_order_month和shop_order_year之间选择查询结果。

所以我的问题是我需要更改什么才能使SELECT语句正确或Javascript功能正常?

任何帮助都会很棒 - 抱歉,如果这有点令人费解。

2 个答案:

答案 0 :(得分:0)

你会想要这个查询。

 SELECT * 
  FROM shop_orders 
 WHERE DATE(CONCAT(shop_order_year,'-',shop_order_month,'-',shop_order_day))
       BETWEEN 'start' and 'end' 
   AND /* the other stuff in your query */

但你应该知道这在搜索方面效率极低。使用shop_order_date类型的DATE列并使用索引和以下查询模式,您会好得多:

 SELECT * 
  FROM shop_orders 
 WHERE shop_order_date BETWEEN 'start' and 'end' 
   AND /* the other stuff in your query */

答案 1 :(得分:0)

根据您的SQL语句的外观,我会说问题是您要使用的SQL关键字和表结构的组合。您不应该为日,月和年使用单独的列,而应考虑使用单个日期时间列类型。这样,您就可以使用对日期和时间值进行操作的标准SQL函数。

另外。 BETWEEN最适用于数字的数据类型。所以,您可以将日期转换为时间戳...但为什么会使事情变得复杂?

将$ start和$ end设置为ISO标准日期 - YYYY-MM-DD。然后:

SELECT * 来自shop_orders 哪里    shop_order_date&gt; =&#39; $ start&#39;    AND shop_order_date&lt; =&#39; $ end&#39;    和......