1

次のような like ステートメントがあります。

AND ( CONCAT( arc_property_res.STREET_NUM, ' ', arc_property_res.STREET_NAME ) LIKE '%{$address}%'

NUMとはNAME異なる列にあります。現在、このクエリは、単一の入力フィールドがあり、次のように入力すると機能します。000 Street Drしかし、試してみると、000 Street Drive結果は0になります。Rd、Blvd、Pk、およびその他のいくつかについても同じことが起こります。

ワイルドカードを 1 つだけ使用してみ%ましたが、まだ見つかりません。どんな助けや考えも大歓迎です。


アップデート

全文検索を使用できるように、テーブルを MyISAM を使用するように変換しました。したがって、一致するすべてのクエリが機能するようになりました。つまり、Dr、Drive、Rd、Road などです。

私のクエリは次のようになります。

AND ( MATCH(arc_property_res.STREET_NUM, arc_property_res.STREET_NAME) AGAINST('{$address}')

入力したアドレスが最初に表示されない場合があります。正しいリストがそこにあることに注意してください。最初ではないだけです。

例:

ここに画像の説明を入力

何かご意見は?

4

2 に答える 2

1

次のようなことを試してみてください。

AND CONCAT( arc_property_res.STREET_NUM, ' ', arc_property_res.STREET_NAME ) LIKE '%{$address}%'
OR '{$address}' LIKE CONCAT( '%', arc_property_res.STREET_NUM, ' ', arc_property_res.STREET_NAME, '%' )

「dr」は「drive」の最初の 2 文字なので、問題はないはずです。ただし、「rd」は「road」の最初の 2 文字ではないため、明らかに問題があります。何らかの全文検索を試して、置換またはより良い方法を考え出すことを検討するかもしれません。

于 2013-02-11T15:54:02.500 に答える