4

私は現在、特定の動物のデータベースを検索する 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

同義語と単語リスト全体がフィドルには大きすぎるため、「バニー」に対してのみ機能します。

4

2 に答える 2

1
select * from searchtestdb
where engname in 
(
  SELECT synonyms.synonym 
  FROM words 
  LEFT JOIN synonyms ON synonyms.word_id = words.word_id 
  WHERE word = "bunny"
)  

SQLFIddle

編集:おそらく同義語だけでなく、直接入力された単語も検索したいので、その条件も追加する必要があります:

OR engname = "bunny"

SQLFIddle

于 2013-04-19T08:07:58.733 に答える