2016-08-25 230 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." "; 
相關問題