首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高级MySQL搜索查询--使用RLIKE

高级MySQL搜索查询--使用RLIKE
EN

Stack Overflow用户
提问于 2014-03-14 11:53:29
回答 1查看 442关注 0票数 0

我正在为Joomla/Virtuemart中的产品搜索模块进行MySQL搜索查询。实际上,我正在尝试修改现有的MySQL查询,从使用MATCH / from到使用RLIKE,但是修改后的查询会出现错误。

下面是匹配/对其没有错误的原始查询:

代码语言:javascript
复制
$searchstring = " +search* +string* +test*";
$query ="SELECT p.virtuemart_product_id, l.product_name from #__virtuemart_products AS p, #__virtuemart_products_".VMLANG." AS l WHERE MATCH(product_name,customtitle) AGAINST ('".$searchstring."' IN BOOLEAN MODE) AND p.published = '1' AND p.virtuemart_product_id = l.virtuemart_product_id  LIMIT 0,".$prods." union (select p.virtuemart_product_id, l.product_name from #__virtuemart_products AS p, #__virtuemart_products_".VMLANG." as l where  MATCH(product_sku) AGAINST ('".$searchstring."' IN BOOLEAN MODE) and p.published = '1'  and p.virtuemart_product_id = l.virtuemart_product_id LIMIT 0,".$prods.")";

下面是我使用RLIKE修改的查询:

代码语言:javascript
复制
$searchstring = "search|string|test";
$query ="SELECT p.virtuemart_product_id, l.product_name from #__virtuemart_products AS p, #__virtuemart_products_".VMLANG." AS l WHERE product_name,customtitle RLIKE '".$searchstring."' AND p.published = '1' AND p.virtuemart_product_id = l.virtuemart_product_id LIMIT 0,".$prods." union (select p.virtuemart_product_id, l.product_name from #__virtuemart_products AS p, #__virtuemart_products_".VMLANG." as l where product_sku RLIKE '".$searchstring."' and p.published = '1'  and p.virtuemart_product_id = l.virtuemart_product_id LIMIT 0,".$prods.")";

我不知道为什么RLIKE搜索查询不起作用。我希望有人能指出我在这里做错了什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-14 12:02:54

查询中有一个奇怪的表达式:

代码语言:javascript
复制
WHERE product_name, customtitle RLIKE '".$searchstring."'

尝试首先使用concat()组合它们:

代码语言:javascript
复制
(SELECT p.virtuemart_product_id, l.product_name
 from #__virtuemart_products p join
      #__virtuemart_products_".VMLANG." l
      on p.virtuemart_product_id = l.virtuemart_product_id
 WHERE concat(product_name, customtitle) RLIKE '".$searchstring."' AND
       p.published = '1'
 LIMIT 0,".$prods."
)
union
(select p.virtuemart_product_id, l.product_name
 from #__virtuemart_products p join
      #__virtuemart_products_".VMLANG." l
      on p.virtuemart_product_id = l.virtuemart_product_id
 where product_sku RLIKE '".$searchstring."' and
       p.published = '1'
 LIMIT 0,".$prods.
)

您还可以分别比较每一个:

代码语言:javascript
复制
 WHERE (product_name RLIKE '".$searchstring."' OR
        customtitle RLIKE '".$searchstring."' 
       ) AND . . .

注意,我还修正了使用显式联接的join语法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22404259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档