3

「類似した」レコードを選択する必要があるシステムがあります。製品の大きなリストを含むデータベースを想像してみてください。ユーザーが製品の名前の一部を入力すると、検索している製品に関する提案として製品のリストが表示されます。これらの製品には、より長い説明フィールドもあります。

これはクエリに関するものではないWHERE product_name LIKE '%entered_string%'と思います。ロジックは、Stack Overflowが使用する可能性のあるものに似ています。idest:質問をすると、すでに回答がある可能性のある質問同様の質問が表示されます。どちらも、明らかに私が質問したいことを導き出す方法を使用しています。タイトル/コンテンツに質問し、データベースを検索して結果を表示します。

PHPとMySQLをデータベースとして使用することでそれが達成できるかどうか疑問に思います。

例:入力すると、、、などのfood結果が得られます。これらは両方とも、プログラムで相互にリンクするのに役立つ類似したものを持っています。1kg orangesbreadcookies

4

2 に答える 2

3

このシナリオにアプローチする方法はたくさんあります。しかし、私はまっすぐなものは、すべてのアイテムに複数のキーワード/タグをマッピングすることだと思います。したがって、ユーザーが入力するときは、アイテムテーブルを検索 するのではなくマップされたキーワードを検索し、その検索に基づいて関連アイテムをロードする必要があります。

于 2012-08-17T16:11:25.353 に答える
2

同様の製品を表示したい場合は、その情報をデータベースに入れる必要があります。したがって、食品のカテゴリを作成し、すべての食品をそのカテゴリに割り当てます。そうすれば、似たような製品を簡単に選択できます。これを行う他の効率的な方法はありません

だからあなたのデータベース:

categories:
|id|name
 1    fruit
 2    Cars

Products
|id|name|category_id
  1  apple 1
  2  Ford focus  2

そして、あなたはこのように選択することができます:

SELECT `name`,`id` FROM `products` WHERE category_id = 1;

別の方法(コメントで提案されているように)はタグです

Products
|id|name|tags
  1  apple "fruit food delicious" 
  2  Ford focus  "Car wheels bumper"

最良の方法は、タグで全文検索を使用することです。

SELECT * FROM `products` WHERE MATCH(tags) AGAINST ('fruit')

タグにフルテキストインデックスがあることを確認してください。

于 2012-08-17T16:09:09.963 に答える