Выбор значений базы данных по определенным интервалам, не работает должным образом

HTML-форма:

<form method="POST" action="configuration/raportare/generate_orhideea.php">
<input type="text" name="reportrangeTwo" class="pull-right" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; width: 100%"/><br>
<input type="submit" value="Generează raport">
</form>

Форма имеет входной диапазон данных Jquery, который позволяет мне выбирать две даты одновременно.

файл generate_orhideea.php, где я вычитаю каждую дату explode() функция:

    //SOME CODE HERE
// Create database variables
require_once "../../configuration/db.php";
$dates = $_POST['reportrangeTwo']; // E.g: 19-01-2017 | 17-02-2017
$first_date = explode(" ", $dates);
$begin = $first_date[0];
$end = $first_date[2];

$rows = mysqli_query($connection, "SELECT * FROM clienti_orhideea WHERE data_inregistrare between '$begin' and '$end' order by data_inregistrare asc");
// loop over the rows, outputting them
while ($row = mysqli_fetch_assoc($rows)) fputcsv($output, $row);
?>

Если $dates = 17-02-2017 | 17-02-2017 он вернет мне все значения с сегодняшнего дня.

Если $dates = 16-02-2017 | 16-02-2017 он вернет мне все значения со вчерашнего дня.

Если $dates = 19-01-2017 | 17-02-2017 он должен возвращаться за последние 30 дней, но возвращается пустым, потому что у меня нет даты, начинающейся с 19.

Но если $dates = 11-02-2017 | 17-02-2017, он вернет мне ВСЕ значения за последние 7 дней, ВКЛЮЧАЯ значения от 14-01-2017. Это более 7 дней.

В чем может быть проблема?

0

Решение

Попробуйте преобразовать даты, которые вы хотите сравнить, в формат, подходящий для MySQL:

$rows = mysqli_query($connection,
"SELECT * FROM clienti_orhideea
WHERE data_inregistrare between
STR_TO_DATE('$begin', '%d-%m-%Y') AND
STR_TO_DATE('$end', '%d-%m-%Y')
ORDER BY data_inregistrare ASC");

Если вы случайно сохранили дату как тип данных varchar (вы всегда должны использовать date, datetime или любой другой тип данных, совместимый с датой / временем в MySQL), вы можете попробовать это:

$rows = mysqli_query($connection,
"SELECT * FROM clienti_orhideea
WHERE STR_TO_DATE(data_inregistrare, '%d-%m-%Y') between
STR_TO_DATE('$begin', '%d-%m-%Y') AND
STR_TO_DATE('$end', '%d-%m-%Y')
ORDER BY STR_TO_DATE(data_inregistrare, '%d-%m-%Y') ASC");
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector