2012-03-02 228 views
1

對於搜索功能,我需要能夠通過組合兩列來顯示結果。mysql SELECT * FROM table WHERE column + space + column LIKE'%query%'

更確切地說:我在數據庫中有一個名爲「members」的表,其中有一個名爲「firstname」的列和一個名爲「lastname」的列,我需要爲此使用它。當某人鍵入全名時,例如。 Jane Doe,我希望查詢結合firstname +空格(& nbsp?)+ lastname是否帶來任何結果。

到目前爲止我的代碼是這樣的:

$poster = mysql_query("SELECT id FROM members WHERE (firstname'&nbsp'lastname) LIKE '%$search%'") or die(mysql_error()); 
$poster = mysql_fetch_object($poster); 

我知道這可能是錯誤的,這是最近我試着周圍的名字+姓氏位括號嘗試之後,等等,等等...但是的,任何幫助將不勝感激。

回答

2

使用CONCAT功能:

SELECT id FROM members 
WHERE CONCAT(firstname, ' ', lastname) LIKE ? 
+0

非常感謝!我會記下CONCAT功能,之前沒有聽說過 – Elizabeth 2012-03-02 13:29:34

1

嘗試CONCAT

SELECT id FROM members WHERE concat(firstname, ' ', lastname) LIKE '%$search%' 
1
SELECT id FROM members WHERE (firstname + ' ' + lastname) LIKE '%$search%' 
1

我相信你正在尋找的是:

$name_var = 'John Doe'; 

// Example 1 - using concatenation 
$sql = "SELECT id FROM members WHERE CONCAT(firstname, ' ', lastname) = '$name_var'"; 

上面的語句將搜索FO [R一切在那裏的第一個名字是約翰和最後一個名字是李四

這是相當ineficcient,因爲它會在MySQL的評估CONCAT每次我相信

我會建議在PHP中,字符串是二驗證如你所期望的話

$name_var = 'John Doe'; 

// this will split the string based on spaces 
$names = explode(' ', $name_var); 
$first_name = $names[0]; 
$last_name = $names[1]; 

// Example 2 - searching each field 
$sql = "SELECT id FROM members WHERE firstname = '$first_name' AND lastname = '$last_name'"; 

上面的語句仍然會尋找一切在那裏的第一個名字是約翰和最後一個名字是李四

在上面statment你實際上只是基於精確值搜索,因此是更高效。如果此查詢將定期運行,則還應該將索引添加到mysql表中的名字和姓氏字段,因爲這會大大提高速度!

希望這有助於!

Tom

相關問題