Php mySQL如何限制查询返回包含子字符串的所有结果 让我们考虑一个例子。我想搜索这辆车,结果都是对的
但问题是,我还得到了所有包含car作为子字符串的结果,例如,我的结果还返回了carto、care以及数据库中包含car作为子字符串的每个单词 我想要的是应用一个过滤器/条件,这样它就不会返回像carto和care这样的单词,而应该只返回像car和cars这样的单词 我怎样才能做到这一点?我尝试过以下解决方案,我知道问题是什么,但我不知道如何解决它Php mySQL如何限制查询返回包含子字符串的所有结果 让我们考虑一个例子。我想搜索这辆车,结果都是对的,php,mysql,Php,Mysql,但问题是,我还得到了所有包含car作为子字符串的结果,例如,我的结果还返回了carto、care以及数据库中包含car作为子字符串的每个单词 我想要的是应用一个过滤器/条件,这样它就不会返回像carto和care这样的单词,而应该只返回像car和cars这样的单词 我怎样才能做到这一点?我尝试过以下解决方案,我知道问题是什么,但我不知道如何解决它 $string.='( tbl_data.ad_title like "%'.$_REQUEST['searchtt'].'%
$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
}
听起来你想搜索单数和复数名词,例如“car”和“cars”、“apple”和“apples”。对吗 如果是这样,请使用更具体的
where
子句,而不要像那样只查找单数和复数形式:
$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."')
...
这是一个幼稚的实现,可能适合您。大多数复数形式都很简单,只需加一个“s”,但以元音结尾的名词需要“es”,例如potato/potatos,还有很多不规则的形式,比如foot/foot和child/children。详情请参阅
您需要知道的另一件事是查询(searchtt
)是否总是单数的。例如,人们总是搜索“car”而不是“cars”?使用WHERE title IN('car','cars')
听起来像是要进行区域设置感知的全文搜索,因为您的问题表明您需要子字符串结果,但不是所有子字符串结果。无论是单数还是复数,我需要它必须比较excite单词,这意味着如果我输入的是搜索汽车而不是汽车。在这种情况下,你需要准确地告诉我们你所说的“我想要的是应用一个过滤器/条件,这样它就不会返回卡通和关怀之类的词,而应该只返回汽车和汽车之类的词”。