0

私のMysql DBには、次のような用語のリストがあります(最初の文字は大文字で、ほとんどの場合複数形)

Hairdressers
Restaurants
Beauty Salons 
Fournitures For Restaurants

私のウェブサイトには、ユーザーがそれらの単語を検索できる検索バーがあります (私のウェブサイトは一種の POI ファインダーです)。しかし、クエリに問題があります。

SELECT * FROM TABLE WHERE word = 'userword'

1: ユーザーがレストランに入ると、'r' を小文字にするため機能しません。2: ユーザーがレストランに入った場合

私は試してみましたSELECT * FROM TABLE WHERE word like 'userword'

これは大文字の問題を修正しますが、ユーザーが単語を単数で入力したときにクエリを機能させる方法がわかりません。DBにもその単語を追加する唯一の解決策ですか?

ありがとうございました

4

3 に答える 3

3

おそらく、単語の末尾にある追加の s のみをテストする複数形の名前にも一致する正規表現を使用する方が良いでしょう:

SELECT * FROM table where word REGEXP '^userword[s]?'

MySQL の正規表現の一致では、デフォルトで大文字と小文字が区別されないことに注意してください。

于 2011-11-13T10:14:24.680 に答える
1

最善の解決策は、適切な検索エンジンを使用することです。この検索エンジンは、適切なアナライザーとステマーを使用して、ユーザーに高品質の結果を提供します。このような検索エンジンはわかりやすく、実装の詳細を扱いたくない場合は、検索サーバーであるSolrを使用できます。

于 2011-11-13T11:01:01.940 に答える
1

LIKE を使用する場合、% を使用してワイルドカードを表すことができます

そう:

SELECT * FROM table where word like '%userword%'

一致:

userword, userwords, superuserwords, ...

ただし、このように LIKE を使用する場合 (追加の sに注意してください):

SELECT * FROM table where word like '%userwords%'

一致しません:

userword, superuserword, ...
于 2011-11-13T10:08:09.797 に答える