我正在线学习本教程: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%'";
答案 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;
}
}
然后运行此查询。
另一个也是更好的解决方案是更复杂的基于单词(标签)的索引,因为当使用更多单词时,这可以生成病态查询。