用于搜索可用汽车的MySql,其日期范围获得具有不同值的相同ID

时间:2016-11-27 14:21:14

标签: php mysql date

我需要帮助才能使用此代码显示所有可用的汽车。

$query = "SELECT DISTINCT kendaraan.* FROM kendaraan 
    LEFT JOIN transaksi ON kendaraan.ID_Kendaraan =    transaksi.ID_Kendaraan  
    WHERE  (Tipe LIKE'%$tipemerk%' OR Merk LIKE '%$tipemerk%') AND ID_Tipe='$tipe'
            AND COALESCE(transaksi.Tgl_Peminjaman  NOT BETWEEN '$tglpergi'  AND '$tglkembali', TRUE)
            AND COALESCE(transaksi.Tgl_Pengembalian  NOT BETWEEN '$tglpergi'  AND '$tglkembali', TRUE)
            AND COALESCE('$tglpergi'  NOT BETWEEN transaksi.Tgl_Peminjaman  AND transaksi.Tgl_Pengembalian, TRUE)
            AND COALESCE('$tglkembali'  NOT BETWEEN transaksi.Tgl_Peminjaman  AND transaksi.Tgl_Pengembalian, TRUE)";       
    $result = mysqli_query($con,$query);

我的 transaksi 数据库(交易):( Tgl_Peminjaman是开始日期,Tgl_Pengembalian是结束日期)

ID_Transaksi | ID_User | ID_Kendaraan | ID_Karyawan | Tgl_Peminjaman | Tgl_Pengembalian | Tgl_Transaksi | Tgl_Kembali | Total_Biaya | Bank | Status_Pembayaran | Denda_Keterlambatan | Status   | Alamat_pengiriman                     | Supir
TR001        | NP002   | KDR001       |             | 2016-11-28     | 2016-11-28       | 2016-11-27    | 0000-00-00  |      500000 | BCA  | Belum Bayar       |                   0 | Diproses | jl. duri kosambi no 414 jakarta barat | Tidak
TR002        | NP002   | KDR001       |             | 2016-11-29     | 2016-11-29       | 2016-11-27    | 0000-00-00  |      500000 | BNI  | Belum Bayar       |                   0 | Diproses | jl. duri kosambi no 414 jakarta barat | Tidak

我的kendaraan数据库(车辆):

ID_Kendaraan | ID_Tipe | Merk       | Tipe              | Tahun | CC    | Warna          | KM    | Foto                   | Harga
KDR001       | MBL     | Toyota     | Avanza            | 2016  | 1500  | Hitam          | 3231  | image/KDR001.png       |  500000
KDR002       | MBL     | Toyota     | Avanza            | 2016  | 1500  | Biru           | 2900  | image/AVblue.png       |  450000
KDR003       | MBL     | Toyota     | Avanza            | 2014  | 1500  | Putih          | 2900  | image/AVwhite.jpg      |  400000
KDR004       | MBL     | Toyota     | Avanza            | 2014  | 1300  | Silver Metalic | 2900  | image/AVsilver.png     |  400000
KDR005       | MBL     | Toyota     | Prius             | 2014  | 1300  | White          | 2900  | image/PRwhite.jpg      |  300000

问题是我仍然得到具有不同价值的ID_Kendaraan。因此,如果我使用开始日期"2016-11-28"和结束日期" 2016-11-28"进行搜索,则仍会显示ID_Kendaraan with id = KDR001 , Tgl_Peminjaman = 2016-11-29 , and Tgl_Pengembalian = 2016-11-29

我得到的输出:

 ID_Kendaraan | ID_Tipe | Merk   | Tipe   | Tahun | CC   | Warna          | KM   | Foto                 | Harga  | Tgl_Peminjaman | Tgl_Pengembalian
 KDR001       | MBL     | Toyota | Avanza | 2016  | 1500 | Hitam          | 3231 | image/KDR001.png     | 500000 | 2016-11-29     | 2016-11-29
 KDR002       | MBL     | Toyota | Avanza | 2016  | 1500 | Biru           | 2900 | image/AVblue.png     | 450000 | NULL           | NULL
 KDR003       | MBL     | Toyota | Avanza | 2014  | 1500 | Putih          | 2900 | image/AVwhite.jpg    | 400000 | NULL           | NULL
 KDR004       | MBL     | Toyota | Avanza | 2014  | 1300 | Silver Metalic | 2900 | image/AVsilver.png   | 400000 | NULL           | NULL
 KDR005       | MBL     | Toyota | Prius  | 2014  | 1300 | White          | 2900 | image/PRwhite.jpg    | 300000 | NULL           | NULL

我想要的输出:

 ID_Kendaraan | ID_Tipe | Merk   | Tipe   | Tahun | CC   | Warna          | KM   | Foto                 | Harga  | Tgl_Peminjaman | Tgl_Pengembalian
 KDR002       | MBL     | Toyota | Avanza | 2016  | 1500 | Biru           | 2900 | image/AVblue.png     | 450000 | NULL           | NULL
 KDR003       | MBL     | Toyota | Avanza | 2014  | 1500 | Putih          | 2900 | image/AVwhite.jpg    | 400000 | NULL           | NULL
 KDR004       | MBL     | Toyota | Avanza | 2014  | 1300 | Silver Metalic | 2900 | image/AVsilver.png   | 400000 | NULL           | NULL
 KDR005       | MBL     | Toyota | Prius  | 2014  | 1300 | White          | 2900 | image/PRwhite.jpg    | 300000 | NULL           | NULL

那么如何获得我想要的输出? 我不想展示已预订的汽车。 对不起我的英语不好,我的母语是印度尼西亚语。

1 个答案:

答案 0 :(得分:0)

不确定您在查询中输入NOT BETWEEN的原因。我想你应该改变这个:

AND COALESCE(transaksi.Tgl_Peminjaman  NOT BETWEEN '$tglpergi'  AND '$tglkembali', TRUE)
AND COALESCE(transaksi.Tgl_Pengembalian  NOT BETWEEN '$tglpergi'  AND '$tglkembali', TRUE)

到此:(显示已预订的汽车和交易日期为NULL的汽车)

AND (transaksi.Tgl_Peminjaman IS NOT NULL OR transaksi.Tgl_Peminjaman  >= '$tglpergi')
AND (transaksi.Tgl_Pengembalian IS NOT NULL OR transaksi.Tgl_Pengembalian  <= '$tglkembali')

或者:(显示交易日期为NULL的汽车)

AND transaksi.Tgl_Peminjaman IS NULL
AND transaksi.Tgl_Pengembalian IS NULL