首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CONCAT_WS代替全文搜索

如何使用CONCAT_WS代替全文搜索
EN

Stack Overflow用户
提问于 2012-02-17 23:29:57
回答 2查看 246关注 0票数 0

MySQL

代码语言:javascript
复制
+----+-------------------+----------+--------------+
| id | address           | city     | state        |      
+----+-------------------+----------+--------------+
| 1  | 13000 highway 244 | keystone | south dakota |
+----+-------------------+----------+--------------+

(顺便说一句,我漏掉了一些专栏,这样就更容易了)

PHP

代码语言:javascript
复制
$string = mysql_real_escape_string('13000 highway 244 south dakota');

$a = mysql_query("

    SELECT * FROM `table` WHERE

    CONCAT_WS(' ', `address`, `city`, `state`) LIKE '%$string%'

");

上面的搜索查询不返回任何结果,只有以下values才能工作:

南达科他州keystone

  • keystone
  • 13000高速公路244号基斯通南达科他州
  • 13000高速公路244号南达科他州

但是,我还想让下面的values开始工作:

南达科他州keystone

  • south 13000高速公路keystone

  • etc.

  • 13000号公路
  • 13000公路

在不依赖full-text search的情况下,这可能吗?

EN

回答 2

Stack Overflow用户

发布于 2012-02-17 23:58:08

为什么不像这样更明确地编码呢?

代码语言:javascript
复制
$address = mysql_real_escape_string('13000 highway 244');
$city = mysql_real_escape_string('keystone');
$state = mysql_real_escape_string('south dakota');

$a = mysql_query( '

    SELECT * 
      FROM `table` 
     WHERE (   ( address = ' . $address . ' )
           AND ( city    = ' . $city    . ' )
           AND ( state   = ' . $state   . ' )
           )
        OR ( state   = ' . $state   . ' )
             .. probably more alternatives ...
');
票数 1
EN

Stack Overflow用户

发布于 2013-07-31 09:47:14

在传递查询字符串之前,用通配符替换空格,这样即使是"130达科达“也能工作。

$string = str_replace( array('*', '?', ' '), array('%', '_', '%'), $string); //Change norm wildcards to mysql format and replace spaces with wildcards

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

https://stackoverflow.com/questions/9336909

复制
相关文章

相似问题

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