Получение данных из SQL в зависимости от количества дней между двумя датами. - PullRequest
0 голосов
/ 11 мая 2018

У меня есть таблица STUDENT в SQL с отформатированным столбцом «ДАТА» (2018-04-23) под названием «DateCompleted»

Что я пытаюсь сделать, это вытащить всех студентов, у которых есть «DateComplete»'дата, которая меньше 5 дней от сегодняшней даты.

Я нашел здесь много вопросов, отвечающих на небольшие части того, что мне нужно, и это то, что у меня есть до сих пор.Код выполняется, но ничего не происходит.

$getToday = date("Y-m-d");

$SQLstring = "SELECT * FROM STUDENT WHERE Department='" . $dept . "'";

$SQLGetCompleted = "AND (DATEDIFF(d, " . strtotime($getToday) . ", DateCompleted) < 5")

$db_selected = mysqli_query($con, $SQLstring . $SQLGetCompleted);

DATEDIFF должен возвращать количество дней между сегодняшним днем ​​и датой DateCompleted, а затем, если оно меньше 5 дней

ПРИМЕЧАНИЕ: $ getTodayдолжна быть строкой, отформатированной в строке SQL, иначе произойдет ошибка, если вы попытаетесь поместить значение даты в строку.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018
AND (DATE(DateCompleted) - fn Now()) < 5

ИЛИ

AND DATE(DateCompleted)  <  fn Now() - 5

ИЛИ

AND DATE(DateCompleted)  <  GETDATE() - 5
0 голосов
/ 11 мая 2018

Во-первых, вы должны научиться использовать параметры.Во-вторых, ваш запрос будет выглядеть следующим образом:

Для чего-либо за последние пять дней:

where datecompleted >= curdate() - interval 5 days and
      datecompleted <= curdate()  -- may not be needed

Для чего-либо в течение 11 дней (5 до, 5 после, сегодня).

where datecompleted >= curdate() - interval 5 days and
      datecompleted < curdate() + interval 5 days

Если datecompleted действительно имеет компонент времени, то вам нужно быть немного более осторожным.Ваши данные показывают, что это просто дата.

...