【问题标题】:mysql/sql search for first name and last name with one keyword stringmysql/sql 用一个关键字字符串搜索名字和姓氏
【发布时间】:2012-01-13 23:26:44
【问题描述】:

我有以下字段:名字和姓氏 关键字是$keyword 如果有人搜索:John Doe 我希望它能够返回结果。 现在,如果它的 john 或它的 doe,它会返回结果。 这是代码:

$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 }

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 在提供$q之前,将所有空格替换为%,或者提供两个参数; $first_name 和 $last_name。

标签: php mysql sql


【解决方案1】:

您希望名字和姓氏与您的参数匹配,而不是名字或姓氏,因此它应该是 firstname LIKE '%$q%' AND lastname LIKE '%$q%'

请记住,由于您使用的是 LIKE,如果名称是 John Doe、Johnnie Doe、John Does、Johnnie Does,这些都将与名字包含 John 而姓氏包含 Doe 的任何其他记录一起返回.

【讨论】:

  • 如果我使用 AND 然后它必须检查两个字段的 $q 值,那将不起作用。所以他们都需要拥有它。它现在不返回任何结果
  • 啊,我错过了您为两个字段传递相同的值。有没有办法将其解析为两个值?
【解决方案2】:

如果用户提供像“John Doe”这样的响应,这应该修剪任何额外的空白,将提供的名称分解为值并根据您提供的代码查询它们:

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

希望对你有帮助

【讨论】:

  • 我认为这不适用于名字或姓氏中包含空格的情况 - 例如“Mary Sue Smith”。
猜你喜欢
  • 1970-01-01
  • 2011-08-19
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多