Строка даты поиска php
У меня есть несколько клиентов с форматом DOB гггг-мм-дд.
как мне искать клиента по дате его рождения, даже если я сначала введу год, месяц или дату, он покажет результат.
на данный момент мне нужно использовать формат гггг-мм-дд для их поиска.
$result = $db->query("SELECT f_name, l_name, dob, email FROM user WHERE dob LIKE'$keyword%' OR f_name LIKE '$keyword%' OR l_name LIKE '$keyword%' LIMIT 100")
if($result) {
if($db->affected_rows()!= 0){
// echo the result
}
}
2 ответа
Скорее, чем LIKE
, ты можешь использовать YEAR()
, MONTH()
, DAY()
сравнить с. Убедитесь, что вы правильно сбежали $keyword
уже...
$result = $db->query("
SELECT f_name, l_name, dob, email
FROM user
WHERE
// The year, month, or day can be an exact match (note parentheses)
(YEAR(dob) = '$keyword' OR MONTH(dob) = '$keyword' OR DAY(dob) = '$keyword')
// Or the full yyyy-mm-dd date can be an exact match
OR DATE(dob) = '$keyword'
// OR UK date format
OR DATE(dob) = STR_TO_DATE('$keyword', '%d/%m/%y')
// or the rest of your conditions...
OR f_name LIKE '$keyword%' OR l_name LIKE '$keyword%' LIMIT 100"
);
РЕДАКТИРОВАТЬ: добавлены кавычки вокруг целочисленных компонентов даты, чтобы избежать синтаксических ошибок при поиске строк, а не чисел.
На мой взгляд, было бы лучше нормализовать дату в PHP:
$date = strtotime($keyword);
$result = $db->query('
SELECT f_name, l_name, dob, email
FROM user
WHERE
f_name LIKE "$keyword%"
OR l_name LIKE "$keyword%"
'.($date&&$date!=-1?'OR dob="'.date('Y-m-d',$date).'"':'').'
LIMIT 100
');