1

これは非常に簡単なことかもしれません。検索ツールを作成しています。アドレスを保持する varchar フィールドがあります。例:

2343 S Cherry Creek St.

そのため、フィールドの一部または全部を検索できるようにしたいと考えています。私が試してみました

LIKE '%$address%' 

しかし、最終用途が

"2343 S Cherry" 

結果は返されません。ユーザーが単語を 1 つだけ入力すると、次のように機能します。

"2343" 

正しいレコードを返します。したがって、これは、用語全体を検索できないスペースに関するものだと思います。

エンド ユーザーがアドレス フィールドを複数の単語で検索できるようにする方法を教えてください。LIKE、%% の使用と関係があることはわかっていますが、スペースを許可する必要があります。

4

4 に答える 4

1

問題はスペースではなく、PHP を介してユーザー入力を挿入する方法です。

このSQLFiddle Demoを見てください。


おそらく問題は、ユーザーが文字列全体を検索できるように、入力に引用符を入力できるようにしているように見えることです。

あなたがしたいのは、PHP で引用符を削除してから、入力を SQL ステートメントに挿入するか、バインドされたパラメーターとして挿入することです。

$address = strtr($address, array('"' => '', "'" => ''));

これにより、文字列から一重引用符と二重引用符の両方が削除されます。

于 2012-07-28T17:28:31.497 に答える
1

インポートでエラーが発生しました。そのため、データベースにインポートされていたアドレスが追加され、余分なスペースが追加されました。そのため、単語間に 1 つのスペースを入れて検索すると、データベース内のデータに 2 つのスペースがあったため、0 の結果が返されました。インポート スクリプトを修正し、動作するようになりました。ありがとうございました。

于 2012-07-28T16:14:49.070 に答える
0

これを試して

$arr = explode(' ', $address);
if (count($arr)) {
    $query = "SELECT address FROM table WHERE address LIKE '%" . implode( "%' OR address LIKE '%", $arr) . "%' ";
}
于 2012-07-28T16:02:17.323 に答える
0

私は次のことを提案します

SELECT * FROM table WHERE REPLACE(address, ' ', '') LIKE REPLACE('%$address%', ' ', '');

これにより、スペースがスペース以外に置き換えられるため、より近くて簡単に一致させることができます。

于 2012-07-28T16:04:45.163 に答える