2012-01-13 33 views
2

我想搜索的字段名字和姓氏的關鍵字加入MySQL的2場,同時

$q1 = strtolower($_GET["q"]); 
$q=str_replace(" ","%",$q1); 
$sql = "select DISTINCT users.*, user_id FROM users WHERE $email_filter 
firstname LIKE '%$q%' OR lastname LIKE '%$q%' ORDER BY lastname"; 
$rsd = mysql_query($sql); 
while($rs = mysql_fetch_array($rsd)) { echo $results } 

這同時搜索是我到目前爲止,問題是,如果你使用李四作爲一個例子,一旦你鍵入約翰找到它,能源部它發現它,但李四......沒有結果

+2

您需要連接第一和姓領域,並比較*是*您搜索字符串,按[下使用mysql concat()在WHERE子句?](http://stackoverflow.com/questions/303679/using-mysql-concat-in-where-clause) – 2012-01-13 23:56:32

回答

0

喜歡的東西

SELECT * FROM users where CONCAT(firstname, ' ', lastname) like '%$q%' 

或者

SELECT * FROM users where CONCAT_WS(' ', firstname, lastname) like '%$q%' 

如果倒車是可取的,試試這個:

SELECT * FROM users where CONCAT_WS(' ', firstname, lastname) like '%$q%' 
         or CONCAT_WS(' ', lastname, firstname) like '%$q%' 

(也就是說,如果搜索 「AB」 應該回到 「AB」 以及 「BA」)

+0

但是不會找到doe john – kaklon 2012-01-15 21:00:19

+0

它應該*不*返回「John Doe 「當查詢是」Doe John「時。如果它應該,那麼你有一個不同的問題。我錯過了那部分。請確認你想要這樣,我會嘗試。 – MJB 2012-01-15 21:04:33

0

我建議你綁定變量。否則,您將接觸到sql注入。

$stmt = $mysqli->prepare("select * from users where firstname like ? AND lastname like ?"); 
$stmt->bind_param('ss', $firstname,$lastname); 
+0

這是一個有用的建議,但與問題無關。 – MJB 2012-01-16 13:16:23

0

你必須拆分您的查詢字符串,然後搜索各方面

$query_terms = explode(" ", $q1); 
$conditions = '' 
foreach($query_terms as $term){ 
    $conditions = $conditions.' firstname LIKE "%'.$term.'%" OR lastname LIKE "%'.$term.'%"'; 
} 

$sql = "select DISTINCT users.*, user_id FROM users WHERE $email_filter $conditions ORDER BY lastname";