mySQL如何限制查询返回包含子字符串的所有结果


mySQL how to limit query returning all results containing a substring

让我们考虑一个例子。我想搜索汽车,我得到了所有正确的结果。

但问题是,我也得到了所有包含car作为子字符串的结果。例如,我的结果还返回了我的数据库中的卡通、关怀和每个包含car的单词作为子字符串

我想要的是应用一个过滤器/条件,这样它就不会返回卡通和关怀之类的单词,而应该只返回car和cars之类的单词。

我怎样才能做到这一点?我已经尝试了以下解决方案,我知道问题是什么,但我不知道如何解决

$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"answers"cars"、"apple"answers"apples"。这是正确的吗?

如果是这样,请使用更具体的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."')
...

这是一个可能对您有用的天真实现。大多数复数都很容易——只需加一个"s"——但以元音结尾的名词需要"es",例如土豆/土豆,还有很多不规则的形式,比如脚/脚和孩子/孩子。有关详细信息,请参阅如何在php-mysql-中搜索单数/复数

您需要知道的另一件事是查询(searchtt)是否总是单数。例如,人们总是搜索"汽车"而不是"汽车"吗?