Поиск между несколькими типами диапазона дат? - PullRequest
1 голос
/ 23 июня 2019

Проблема в том, что я пытаюсь найти записи между двумя типами дат (date_open и date_close)

 +---------+------------------+-------+-----------+------------+------------+
 | File ID | File Desc.       |Return | Open Date | Close Date | Open/Close |
 +---------+------------------+-------+-----------+------------+------------+
 | 400/4   | 1 - Test 1 400/4 |       |2016-02-12 | 2018-03-26 |    Close   |
 +---------+------------------+-------+-----------+------------+------------+
 | 400/1   | 5 - Test 5 400/1 |       |2016-01-11 | 2018-02-23 |    Close   |
 +---------+------------------+-------+-----------+------------+------------+
 | 400/1   | 2 - Test 2 400/1 |       |2015-03-16 | 2017-05-20 |    Close   |
 +---------+------------------+-------+-----------+------------+------------+
 | 400/2   | 3 - Test 3 400/2 |       |2015-05-15 | 2017-02-11 |    Close   |
 +---------+------------------+-------+-----------+------------+------------+
<label>File ID</label>
        <input name="txtKeyword" type="text" id="txtKeyword" value="<?php echo $strKeyword;?>" placeholder="Ex. 400/1">
<label>File Description</label>
        <input name="txtKeyword2" type="text" id="txtKeyword2" value="<?php echo $strKeyword2;?>" placeholder="Ex. 10 - Pelbagai Surat Menyurat Ansuran Cukai Tanah">
<label>Date Open from </label>
        <input name="txtKeyword3" type="date" id="txtKeyword3" value="<?php echo $strKeyword3;?>">
<label>To </label>
        <input name="txtKeyword4" type="date" id="txtKeyword4" value="<?php echo $strKeyword4;?>">
      <br />
<label>Date Close from </label>
        <input name="txtKeyword5" type="date" id="txtKeyword5" value="<?php echo $strKeyword5;?>">
<label>To </label>
        <input name="txtKeyword6" type="date" id="txtKeyword6" value="<?php echo $strKeyword6;?>">
<br />
<label>Status</label>
        <input name="txtKeyword7" type="text" id="txtKeyword7" value="<?php echo $strKeyword7;?>">
<br />
<input class="search" type="submit" value="Search">

Мои входные данные похожи на это

Дата открытия: 2016-01-11 До: 2016-02-12 Дата закрытия с: 2018-02-23 Кому: 2018-03-26

Предполагается, что список будет возвращен следующим образом

 +---------+------------------+-------+-----------+------------+------------+
 | File ID | File Desc.       |Return | Open Date | Close Date | Open/Close |
 +---------+------------------+-------+-----------+------------+------------+
 | 400/4   | 1 - Test 1 400/4 |       |2016-02-12 | 2018-03-26 |    Close   |
 +---------+------------------+-------+-----------+------------+------------+
 | 400/1   | 5 - Test 5 400/1 |       |2016-01-11 | 2018-02-23 |    Close   |
 +---------+------------------+-------+-----------+------------+------------+

Но это не возвращает никакого значения вообще без всплывающей ошибки

 +---------+------------------+-------+-----------+------------+------------+
 | File ID | File Desc.       |Return | Open Date | Close Date | Open/Close |
 +---------+------------------+-------+-----------+------------+------------+

Мой код поиска такой:

$sql = "SELECT * FROM file_list WHERE
              CONCAT(`file_no`) LIKE '%".$strKeyword."%'
          AND CONCAT(`file_desc`) LIKE '%".$strKeyword2."%'
          AND CONCAT(`date_open`) LIKE ((CONCAT(`date_open`) >= '%".$strKeyword3."%' AND  CONCAT(`date_close`) <= '%".$strKeyword4."%'))
          AND CONCAT(`date_close`) LIKE ((CONCAT(`date_close`) >= '%".$strKeyword5."%' AND CONCAT(`date_close`) <= '%".$strKeyword6."%'))
          AND CONCAT(`open_close`) LIKE '%".$strKeyword7."%'";

    $query = mysqli_query($dbConn,$sql);

1 Ответ

0 голосов
/ 23 июня 2019

Я верю, что SQL, который вы ищете, это:

select *
from file_list
where open_date between '2016-01-11' and '2016-02-12'
  and close_date between '2018-02-23' and '2018-03-26';

А вот рабочий пример: http://sqlfiddle.com/#!9/d35d84/4

А вот несколько документов на случай, если вам нужны подробности о between ... and thingie: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_between

Кстати, я надеюсь, что переменные, которые вы вставляете в оператор SQL, правильно отфильтрованы, иначе это было бы хорошим местом для внедрения SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...