mySQL如何限制查询返回包含子字符串

时间:2015-06-28 08:41:18

标签: php mysql

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

但问题是我也得到了包含汽车作为子串的所有结果,例如我的结果也会返回卡通,关注以及包含汽车的每个单词子串在我的数据库中。

我想要的是应用过滤器/条件,以便它不会返回像卡通和护理这样的单词,而应该只返回像汽车和汽车这样的单词。

我怎样才能实现这一目标?我尝试了下面的解决方案,我知道问题是什么,但我无法理解如何解决它

$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
}

1 个答案:

答案 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"而不是"汽车"?