2016-08-25 231 views
0

我有3个HTML select标记用于根据日期从mysql数据库中搜索数据。使用这3个选择标签用户可以选择年份,月份和区域名称(zone_id)。如何根据特定月份从数据库获取数据?

后,选择这3个标签选项值我创建一个变量根据日期来搜索数据:

$selected_year = isset($_POST['year']) ? (int) $_POST['year'] : date("Y"); 
$selected_month = isset($_POST['month']) ? (int) $_POST['month'] : date("n"); 
$selected_zone = isset($_POST['zone']) ? htmlspecialchars($_POST['zone']) : ''; 

$search_date = date('d'.'-'.$selected_month.'-'.$selected_year); 
$search_date = strtotime($search_date); 

$search-date变量选择的月份打印用户为PHP的strtotime()。例如:1470866400

现在我有一个表client_pay_bill,并有一个列名conn_date。这conn_date列值是存储各种月份为php strtotime()。例如:1467324000或1470866400

现在我想获得特定月份的价值。例如:

如果用户选择的年份和月份生成2016年8月的时间戳,那么查询将仅返回2016年8月的数据。我怎样才能做到这一点 ?

SQL查询:

$get_client = "SELECT cbp.advance_amount, cbp.bill_month, cbp.due_amount, cbp.pay_amount, c.is_active, c.client_id, c.user_id, c.address, c.contact_no, zone.zone_name, package.package_name, c.monthly_bill, c.bill_date 
FROM clients AS c 
LEFT JOIN zone ON zone.zone_id = c.zone_id 
LEFT JOIN package ON package.package_id = c.package_id 
LEFT JOIN clients_pay_bill AS cbp ON cbp.client_id = c.client_id 
WHERE c.uid = '$uid' AND c.is_active = 1 AND c.conn_date <= '$search_date' "; 

if($selected_zone != "all") { 
    $get_client .= " AND c.zone_id != '' "; 
} elseif($selected_zone == "all") { 
    $get_client .= " AND c.zone_id != '' "; 
} else { 
    $get_client .= " AND c.zone_id = '$selected_zone' "; 
} 

$get_client .= " ORDER BY c.client_id DESC "; 
$get_client = mysqli_query($conn, $get_client); 

更新:

3选择标签为波纹管:

<div class="col-md-3"> 
<div class="form-group"> 
    <select name="year" id="" class="form-control"> 
     <option value="">--Select Year-- </option>       
     <?php 
     for ($y=2013; $y<=2017; $y++) { 
      if(isset($_POST['year']) && $_POST['year'] == $y) { 
       $selected = 'selected = "selected"'; 
      } elseif(!isset($_POST['year']) && date('Y') == $y) { 
       $selected = 'selected = "selected"'; 
      } else { 
       $selected = ''; 
      } 
      echo "<option value='$y' $selected>$y</option>"; 
     } 
     ?>           
    </select>   
</div>          
</div> 
<div class="col-md-3"> 
<div class="form-group"> 
    <select name="month" id="" class="form-control"> 
     <option value="">--Select Month-- </option>       
     <?php 
     $months = array('January', 'February','March', 'April', 'May', 'June', 'July ', 'August', 'September', 'October', 'November', 'December'); 

     $mcount = 1; 
     foreach($months as $month) { 
      if(isset($_POST['month']) && $_POST['month'] == $mcount) { 
       $selected = 'selected = "selected" '; 
      } elseif(!isset($_POST['month']) && date('n') == $mcount) { 
       $selected = 'selected = "selected" '; 
      } else { 
       $selected = ''; 
      } 
      echo "<option value='$mcount' $selected>$month</option>"; 
      $mcount++;           
     } 

     ?>           
    </select>      
</div> 
</div> 
<div class="col-md-3"> 
<div class="form-group"> 
    <select name="zone" id="" class="form-control">             
    <?php 
    $query_zone = mysqli_query($conn, "SELECT zone_id, zone_name FROM zone WHERE uid = '$uid' ORDER BY zone_id DESC"); 
    $query_zone_num = mysqli_num_rows($query_zone); 
    if($query_zone_num == 0) { 
     echo "<option value=''>No zone added</option>"; 
    } else { 
     echo "<option value=''>Select Zone</option>"; 
     echo '<option value="all" selected="selected">All Zone</option>'; 
    } 
    while($result_zone = mysqli_fetch_array($query_zone)) { 
     $zone_id = (int) $result_zone['zone_id']; 
     $zone_name = htmlspecialchars($result_zone['zone_name']); 

     if(isset($_POST['zone']) && $_POST['zone'] == $zone_id) { 
      $selected = 'selected = "selected" '; 
     } else { 
      $selected = ''; 
     } 
     echo "<option value='$zone_id' $selected>$zone_name</option>"; 
    } 
    ?> 
    </select>      
</div> 
+0

你是在UNIX时间戳格式保存日期在你的client_pay_bill表中? –

+0

我正在使用mysql NOW()来插入。 –

回答

1

你可以让MySQL的处理:

$get_client = " 
    SELECT cbp.advance_amount, cbp.bill_month, cbp.due_amount, cbp.pay_amount, c.is_active, c.client_id, c.user_id, c.address, c.contact_no, zone.zone_name, package.package_name, c.monthly_bill, c.bill_date 
    FROM clients AS c 
    LEFT JOIN zone 
    ON zone.zone_id = c.zone_id 
    LEFT JOIN package 
    ON package.package_id = c.package_id 
    LEFT JOIN clients_pay_bill AS cbp 
    ON cbp.client_id = c.client_id 
    WHERE c.uid = '$uid' 
    AND c.is_active = 1 
    AND MONTH(c.conn_date) = $selected_month 
    AND YEAR(c.conn_date) = $selected_year 
"; 

请尝试一下,检查它是否是你想要的。

编辑,试试这个:

$get_client = " 
    SELECT * 
    FROM clients AS c 
    WHERE MONTH(c.conn_date) = $selected_month 
    AND YEAR(c.conn_date) = $selected_year 
"; 
+0

让我试一试。 –

+0

我编辑了答案,以正确的方式包含变量,并将其与查询字符串连接起来。我忘了那个,对不起。或者,也许没有连接它们就可以使用,因为PHP中一个字符串中的双引号内的所有变量都被替换为它的值。 – William

+0

没有数据显示。 –

0
$get_client = "SELECT cbp.advance_amount, cbp.bill_month, cbp.due_amount,cbp.pay_amount, c.is_active, c.client_id, c.user_id, c.address, c.contact_no, zone.zone_name, package.package_name, c.monthly_bill, c.bill_date FROM clients AS c LEFT JOIN zone ON zone.zone_id = c.zone_id LEFT JOIN package ON package.package_id = c.package_id LEFT JOIN clients_pay_bill AS cbp ON cbp.client_id = c.client_id WHERE c.uid = '$uid' AND c.is_active = 1 AND Month(c.conn_date)=$selected_month. 

尝试这样

+0

select * from log_time l where MONTH(l.created_date_time)= MONTH(str_to_date('2016-07-20','%Y-%m-%d')) – sam

+0

这不起作用 –

+0

can你分享你的表 – premi

0

试试这个它会匹配年月

$get_client = "SELECT cbp.advance_amount, cbp.bill_month, cbp.due_amount,cbp.pay_amount, c.is_active, c.client_id, c.user_id, c.address, c.contact_no, zone.zone_name, package.package_name, c.monthly_bill, c.bill_date FROM clients AS c LEFT JOIN zone ON zone.zone_id = c.zone_id LEFT JOIN package ON package.package_id = c.package_id LEFT JOIN clients_pay_bill AS cbp ON cbp.client_id = c.client_id WHERE c.uid = '$uid' AND c.is_active = 1 AND YEAR(c.conn_date) = ".$selected_year." AND MONTH(c.conn_date) = ".$selected_month." "; 
相关问题