MySQL SELECT WHERE начало & gt; = » и конец & lt; = » как DATETIME с использованием символов подстановки

Я построил сайт, чтобы вставить мои рабочие часы как даты.
Существует запрос Ajax на запрос .Change () в зависимости от (Тип ввода = «текст»).
Перед запросом в PHP я создаю предложение where в отношении этого поля ввода.

Это поле ввода теперь может содержать такие значения, как:

  • 2016 (возвратит все строки с 2016-01-01 по 2016-12-31): ОК
  • 2016-05 (возвратит все строки с 2016-05-01 по 2016-05-31): ОК
  • 2016-05 # 2017-08 (возвратит все строки с 2016-05-01 по 2017-07-31): NOK
    • Должен возвращать все строки с 2016-05-01 по 2017-08-31 (+ 1 месяц)
  • 2016-05-04 # 2017-03-14 (вернет все строки с 2016-05-04 по 2017-03-13): NOK
    • Должны вернуть все строки с 2016-05-04 по 2017-03-14 (+ 1 день)

Лучшие результаты, касающиеся некомментированного предложения. Прокомментированный результат будет неправильным или NULL.

$sd = explode("#",$this->prFilter[$pKey]);
if(1 < count($sd)){
// $this->prArr[$pKey] = " AND t.start LIKE '%".$sd[0]."%' AND t.end LIKE '%".$sd[1]."%'";
// $this->prArr[$pKey] = " AND t.start >= '{$sd[0]}' AND t.end <= '{$sd[1]}'";
$this->prArr[$pKey] = " AND t.start >= '{$sd[0]}' AND t.start <= '{$sd[1]}'";
// $this->prArr[$pKey] = " AND DATE(t.start) BETWEEN CAST('{$sd[0]}%') AND CAST('{$sd[1]}%')";
}
else {
$this->prArr[$pKey] = " AND t.start LIKE '%".$this->prFilter[$pKey]."%'";
}

В будущем это будет использоваться сотрудниками тоже. Так что будет много записей.
Я хотел бы рабочий запрос MySQL и не добавлять слишком много PHP и сократить время / ресурсы.

Вводный запрос:

SELECT t.idTime, p.idProject, t.idCustomer, a.idAddress,
a.city, t.info, t.status, p.descriptionProject,
cu.shortnameCustomer, cu.invoiceAddress, p.nr, t.start,
t.end, t.manBreak, t.trip, p.totalBreak,
p.inRate, p.outRate, p.startBreak1, p.endBreak1,
p.startBreak2, p.endBreak2, DATE_FORMAT(`end`, "%m") AS month,
DATE_FORMAT(`start`, "%Y-%m-%d") AS startdatum, DATE_FORMAT(`start`, "%H:%i:%s") AS startzeit,
DATE_FORMAT(`end`, "%Y-%m-%d") AS enddatum, DATE_FORMAT(`end`, "%H:%i:%s") AS endzeit,
TIMEDIFF(`end`, `start`) AS differenz
FROM time t
LEFT JOIN project p ON (t.idProject=p.idProject) LEFT JOIN address a ON (t.idAddress=a.idAddress)
LEFT JOIN customer cu ON (cu.idCustomer=t.idCustomer)
WHERE TIMEDIFF(`end`, `start`) IS NOT NULL
AND t.idUser=1 AND t.start >= '2016-05-01' AND t.start <= '2016-08-29'
ORDER BY start DESC;

Как установить предложение WEHRE, ​​чтобы получить все требуемые записи?

0

Решение

Задача ещё не решена.

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

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

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