2011-12-13 57 views
0

我得到了很少的DOB格式的客戶名單yyyy-mm-dd。
我如何通過出生日期搜索客戶,即使我先輸入年份或月份或日期,它會顯示結果。php搜索日期字符串

此刻,我需要使用格式yyyy-mm-dd來搜索它們。

$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

不完全知道你是問這裏。你能舉幾個例子來說明你將要搜索的內容嗎? – Turbotoast

+2

附註:通常,'affected_rows'返回受INSERT,DELETE,REPLACE或UPDATE語句影響的行。不過,不是來自SELECT。 –

+0

@LinusKleen感謝您的建議 – tonoslfx

回答

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" 
); 

編輯:圍繞整數日期組件加引號,以避免字符串,而不是號碼搜索時的語法錯誤。

+0

謝謝你真的有幫助:)。我在這個問題上忘了一些問題。即使數據庫中的日期格式爲(yyyy-mm-dd),是否可以使用英國格式(dd/mm/yyyy)搜索DOB?我該怎麼做:) – tonoslfx

+0

@ boyee007也許通過'STR_TO_DATE()'。見上面的增加。如果輸入不符合格式dd/mm/yy,我不確定函數調用是否會失敗。 –

+0

再次感謝。它不會很快返回任何我輸入09'/' – tonoslfx

1

在我看來,這將是更好的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 
');