строка даты поиска php - PullRequest
       20

строка даты поиска php

0 голосов
/ 13 декабря 2011

У меня есть несколько списков клиентов в формате 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 ]

2 голосов
/ 13 декабря 2011

Вместо 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"
);

EDIT : добавлены кавычки вокруг целочисленных компонентов даты, чтобы избежать синтаксических ошибок при поиске строк, а не чисел.

1 голос
/ 13 декабря 2011

На мой взгляд, было бы лучше нормализовать дату в 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
');
...