2017-05-07 68 views
3

我有表reservasi像這樣結構的數據:如何使用日期和時間MySQL之間的,如果日期和時間與不同領域的表

  • id_reservasi
  • package_name < - VARCHAR
  • date_check_in < - varchar格式(dmY)
  • time_check_in < - varchar格式(h:i:s)
  • price < - VARCHAR

我想從以前的數據reservasi到直到指定的時間選擇與日期和時間之間的過濾器的數據。

現在,我用這個SQL查詢:

SELECT SUM(price) AS total 
FROM reservasi 
WHERE date(str_to_date(date_check_in,'%d-%m-%Y')) BETWEEN date(str_to_date('$date_check_in_rekap','%d-%m-%Y')) AND date(str_to_date('$date_now','%d-%m-%Y') 
AND STR_TO_DATE(time_check_in, '%H:%i:%s') BETWEEN STR_TO_DATE('$time_check_in_rekap', '%H:%i:%s') AND STR_TO_DATE('$time_now', '%H:%i:%s') 

但它不顯示任何數據... 如何正確使用BETWEEN

+0

感謝編輯@vkp –

+0

順便說一句,你容易受到SQL **注射**,請閱讀http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php學習如何保護自己 – Blag

+0

我使用pdo來CRUD先生... –

回答

2

編輯,PDO版本:

$cek_pembelian=$this->pdo->prepare(" 
    SELECT 
     SUM(netto_bersih) AS netto_beli, 
     SUM(jumlah_dibayar) AS rupiah_beli 
    FROM p_penerimaan_tbs 
    WHERE str_to_date(CONCAT(tanggal,' ',jam_keluar) ,'%d-%m-%Y %H:%i:%s') 
     BETWEEN str_to_date(:datetime_start ,'%d-%m-%Y %H:%i:%s') AND now() 
     "); 
$cek_pembelian->execute(array(
    ':datetime_start'=>$tanggal_rekap .' '. $jam_rekap 
    )); 

這就是你要我怎麼想?

SQL Fiddle

的MySQL 5.6架構設置

查詢1

SELECT SUM(price) AS total 
FROM t 
WHERE str_to_date(CONCAT(date_check_in,' ',time_check_in) ,'%d-%m-%Y %H:%i:%s') 
BETWEEN '2017-01-24 18:20:33' AND now() 

Results

| total | 
|-------| 
| 300 | 
+0

感謝您的回答...我嘗試像這樣的查詢...(CONCAT(tanggal,'',jam_keluar),'%d-%m(' - %Y%H:%i:%s')BETWEEN'$ tanggal_rekap $ jam_rekap'AND now()「);' Result total total row ... not filter –

+0

@DammahSifLa看看編輯。你的問題是你如何寫日期。 MySQL的方式是'YYYY-MM-DD HH:MM:SS',所以任何東西都應該用'str_to_date()'手動解析。順便說一句,我通過不把php'$ var'放入SQL中來保證你的查詢,而是使用':flag'代替並在'execute()'中提供':flag => $ value'數組,使用 – Blag

+0

謝謝@Blag 工作完美....謝謝:) –

0

感謝來自@Blag

工作完美查詢...

編輯MySQL查詢:

SELECT SUM(price) AS total FROM t WHERE str_to_date(CONCAT(date_check_in,' ',time_check_in) ,'%d-%m-%Y %H:%i:%s') BETWEEN str_to_date('$date_check_in_previous $time_check_in_previous') AND now()