2017-05-07 47 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()