0

MySQL

+----+-------------------+----------+--------------+
| id | address           | city     | state        |      
+----+-------------------+----------+--------------+
| 1  | 13000 highway 244 | keystone | south dakota |
+----+-------------------+----------+--------------+

(ちなみに、簡単にするためにいくつかの列を省略しました)

PHP

$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が機能します。

  • 13000 ハイウェイ 244 キーストーン サウスダコタ
  • 13000 ハイウェイ 244 キーストーン
  • キーストーンサウスダコタ州

ただし、次のことも機能させたいと考えていますvalues

  • 13000 ハイウェイ 244 サウスダコタ
  • 13000ハイウェイキーストーン
  • サウスダコタハイウェイキーストーン

に頼らなくてもそれは可能full-text searchですか?

4

2 に答える 2

1

このようにもっと明示的にコーディングしないのはなぜですか?

$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 ...
');
于 2012-02-17T23:58:08.743 に答える
0

文字列をクエリに渡す前に、スペースをワイルドカードに置き換えて、「130 dakoda」でも機能するようにします

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

于 2013-07-31T09:47:14.753 に答える