私は現在、特定の動物のデータベースを検索する Web サイトの検索機能に取り組んでいます。
ユーザーが を入力するrabbit
と、検索は を通過し、db
の結果が表示されrabbit
ます。
ここで、ユーザーがbunny
検索を入力すると、 を通過しdb
ますが、 に一致するものは見つかりませんbunny
。
ほとんどの人はそれが をbunny
意味することを知っrabbit
ていますが、データベースはそれを知りません。この時点でMySQL
、ユーザーが入力した内容の同義語を検索するために、同じデータベース内にシソーラスを実装しました。
これは、ユーザーが入力bunny
すると、bunny の同義語のリストが表示されることを意味します。
そのリストには単語がRabbit
あり、そこからその単語を引き出して一致を生成しようとしています。この時点で、私は以下を持っています。
"SELECT `engname` FROM `searchtestdb` WHERE `engname` IS NOT NULL ";
-- これは、そのテーブル内のすべての動物の英語名を表示します。--
"SELECT synonyms.* FROM words LEFT JOIN synonyms ON synonyms.word_id = words.word_id WHERE word = \"$searchBox\""
$searchBox
-- これは、ユーザーが入力した単語の同義語を表示します。--
これらのクエリはどちらも、表示したいものを表示します。つまり、最初のクエリではテーブル内のすべての動物の名前が返され、2 番目のクエリではユーザーが入力した単語の同義語が返されます。
この時点で、私の問題は、同義語をすべての動物の名前と比較する方法です。コマンドでいくつかのクエリを試しましたLIKE
が、構文エラーが発生し続けます。
私が求めていることは可能ですか?そうでない場合、より良い行動方針は何ですか?どんな助けでも大歓迎です。
ありがとうございました。
私はあなたのためにセミフィドルを手に入れました。
http://sqlfiddle.com/#!2/47d42/3
同義語と単語リスト全体がフィドルには大きすぎるため、「バニー」に対してのみ機能します。