1

我正在在线完成本教程:http: //goo.gl/qnk6U

数据库表:ajax_search

名字 | 姓氏 | 年龄 | 家乡 | 工作
------------------------------------------
乔 | 史密斯 | 35 | 博尔德 | 中央情报局   
史蒂夫 | 苹果 | 36 | 丹佛 | 联邦调查局

(类型都是 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%'";
4

2 回答 2

1

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

WHERE Firstname LIKE "$firstname" AND Age LIKE "$age"
于 2012-04-25T13:53:54.060 回答
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;
   }
}

然后运行此查询。

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

于 2012-04-25T13:59:56.683 回答