让我们考虑一个例子。我想搜索汽车,我得到了所有结果。
但问题是我也得到了包含汽车作为子串的所有结果,例如我的结果也会返回卡通,关注以及包含汽车的每个单词子串在我的数据库中。
我想要的是应用过滤器/条件,以便它不会返回像卡通和护理这样的单词,而应该只返回像汽车和汽车这样的单词。
我怎样才能实现这一目标?我尝试了下面的解决方案,我知道问题是什么,但我无法理解如何解决它
$string.='(
tbl_data.ad_title like "%'.$_REQUEST['searchtt'].'%"
or tbl_categories.cat_title like "%'.$_REQUEST['searchtt'].'%"
) and ';
$gtdata = mysql_query(
"SELECT tbl_data.id, tbl_data.main_cat, tbl_data.sub_cat,
tbl_data.makevalue, tbl_data.ad_title, tbl_data.additional,
tbl_data.city_name, tbl_data.city_area,
tbl_data.date1,tbl_data.date2,tbl_data.make_featured_active,
tbl_data.make_stoplight_active, tbl_data.make_urgent_active
FROM tbl_data
LEFT JOIN tbl_categories
ON tbl_data.main_cat=tbl_categories.id
WHERE ".$string." tbl_data.status='1' and tbl_data.del=0
and tbl_data.exp=0 and tbl_data.sold=0 and tbl_data.userblock='0'
".$orderby."
limit ".$limit_start.",".$limit_end."");
while($res_gtdata=mysql_fetch_array($gtdata))
{
//all results are stored in this variable
//$res
}
答案 0 :(得分:0)
听起来你想要以单数和复数形式搜索名词,例如" car"和"汽车","苹果"和"苹果"。这是对的吗?
如果是这样,请使用更具体的where
子句而不是仅仅寻找单数和复数形式的like
:
$singular = $_REQUEST['searchtt'];
$plural = $singular.'s';
$gtdata = mysql_query(
"SELECT ...
FROM...
WHERE tbl_data.ad_title IN ('".$singular."', '".$plural."')
OR tbl_categories.cat_title IN ('".$singular."', '".$plural."')
...
这是一个可能适合您的天真实施。大多数复数很容易 - 只需添加一个' - 但是以元音结尾的名词需要' es'例如马铃薯/土豆,并且有许多不规则形式,例如脚/脚和儿童/儿童。有关详细信息,请参阅How to search singular/plurals in php mysql
您需要知道的另一件事是查询(searchtt
)是否总是单数。例如,人们总是会搜索" car"而不是"汽车"?