SQL搜索 - 一次少一个字 - MySQL& PHP

时间:2011-12-21 08:08:46

标签: php mysql sql

我有一个我在我的数据库中搜索的短语,例如“霍桑高地 - 脆弱的未来”

这会产生1个结果,但是,如果我搜索“Hawthorne Heights”,我只能获得更多结果。

我的问题是,是否可以减少搜索条款,直到我收到所需数量的结果或不再有。

E.g。初步搜索

“霍桑高地 - 脆弱的未来”

然后

“霍桑高地 - 脆弱”

然后

“霍桑高地”

然后

“霍桑”

初始搜索词可以是一个词,其中1遍是所需的全部,或者,它可以是10个单词。

这在一个查询中是否可行,或者我是否必须减少该短语然后再次搜索...如果是这样,我将如何减少该短语?

非常感谢您的帮助。

以下是我目前用于查询的代码:

$searchTerm = trim($searchTerm);

    $result345 = mysql_query("SELECT main_category, PRid, title, genre, imageURL, lowprice, highprice, prodcatID from PRprodINFO2 where (($title LIKE '%$searchTerm%') AND (imageURL <>'') $is_cat_id) $genre order by $order_col $asc_desc limit 2000",$db);

$ variables(例如$ title,$ is_cat_id等)是动态的,但不会影响查询,其存储短语的$ searchTerm

1 个答案:

答案 0 :(得分:0)

根据我的理解,在您的情况下,您需要为此创建自定义查询。在这种情况下,您需要先使用"-"然后space(“”)拆分/分解搜索关键字。

所以在这些任务结束时,你将拥有6个以下的所有单词。

For example : 

your search keyword is = "Hawthorne Heights - Fragile Future"

1) Hawthorne Heights
2) Fragile Future.
3) Hawthorne
4) Heights
5) Future
6) Fragile

创建一个包含所有单词的数组并在循环中创建查询。已与OR条件相关联。

EDITE根据您的查询:

$searchterm = "Hawthorne Heights - Fragile Future";

$keyword = explode("-",$searchterm);

for($i=0;$i<count($keyword);$i++){
    $word[] = explode(" ",trim($keyword[$i]));
}

for($j=0;$j<count($word);$j++){
    $str[] = implode(',',$word[$j]);
}


$strArr = explode(',',implode(',',$str));

$queryStr = "";
for($cnt = 0;$cnt<count($strArr);$cnt++){
    $queryStr.= "($title LIKE '%".$strArr[$cnt]."%') OR";
}

$searchTerm = substr($queryStr,0,-2);


$result345 = mysql_query("SELECT main_category, PRid, title, genre, imageURL, lowprice, highprice, prodcatID from PRprodINFO2 where (($title LIKE '%$searchterm%'OR $searchTerm) AND (imageURL <>'') $is_cat_id) $genre order by $order_col $asc_desc limit 2000",$db);

这些代码可能有更多的优化但是因为快点我做的就是我点击快...:)

这可能对你有所帮助..如果你想做其他任何事情我也知道..

感谢。