2012-03-02 180 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

相关问题