PHP搜索多个字段问题

时间:2012-04-25 13:49:08

标签: php mysql full-text-search

我正在线学习本教程:http://goo.gl/qnk6U

数据库表:ajax_search

Firstname | Lastname | Age | Hometown | Job
-------------------------------------------
Joe       | Smith    | 35  | Boulder  | CIA   
Steve     | Apple    | 36  | Denver   | FBI

(类型都是varchar,除了age是一个int。)

我的问题。下面的sql select语句是否正确写入查询“Joe 35”?出于某种原因,我只能查询“Joe”并且它可以工作,但不能组合搜索术语。

$sql = "select * from ajax_search where FirstName like '%$rec%' or LastName like '%$rec%' or Age like '%$rec%' or Hometown like '%$rec%'";

2 个答案:

答案 0 :(得分:1)

假设您的查询是“Joe 35”,那么没有。您的查询匹配任何四个字段中包含“Joe 35”的任何行(在单个字段中)。要查询名称为Joe且年龄为35的用户,您需要拆分搜索查询并执行以下操作:

WHERE Firstname LIKE "$firstname" AND Age LIKE "$age"

答案 1 :(得分:1)

您需要从搜索查询中分割出这些刺痛:

$columns = array("Firstname", "Lastname", "Age", "Hometown", "Job");
$string = ""; // acquire query string
$split = explode(" ", $string);
$search_words = array();
foreach ($split as $word) {
   $search_words[] = $word;
}

创建查询以搜索所有字段:

$first = true;
$sql = "select * from ajax_search where";
foreach ($search_words as $word) {
   foreach ($columns as $col) {
      $sql .= (($first) ? " " : " OR") . "`$col` LIKE \"%" . $word . "%\"";
      $first = false;
   }
}

然后运行此查询。

另一个也是更好的解决方案是更复杂的基于单词(标签)的索引,因为当使用更多单词时,这可以生成病态查询