他の回答に関するコメントを読んだ後、テーブルから行のセットを取得する必要があり、各セットの item_des 列に同様の値を設定する必要があるという結論に達しました。少なくともそれがあなたの例が示すものです。
問題は、「類似」を定義する方法にあります。私が理解している限り、探している類似性の種類を定義するためにクエリに追加のデータを提供したくないと考えています。AshReva と Naryl は、あなたがそうだと思っていました。そのため、クエリで使用することを提案していLIKE '%flower%' or LIKE 'fruit'
ます。
あなたが求めているのは、 list('fruit', 'flower', ...)
を持っていないので、 list を取得する方法だと思います。あなたはあなたのためにそれを見つけるクエリが欲しいです。
それは簡単な作業ではなく、あなたの側で決定を下す必要があります。タスクはかなり複雑なので、すぐに実行できるソリューションを提供するつもりはありません。実行する必要があるいくつかの非常に簡単な手順を紹介します。
まず、item_des フィールドをトークン化する必要があります。必要なのは、トークンと呼ばれる 1 つのフィールドを持つ t と呼ばれる別のテーブルです。例をトークン化した後、次のようなテーブルを取得する必要があります。
token
fruit
books
beautiful
flower
&
nice
smell
gud
fruit
flower
おそらく、独自のトークン化関数を作成する必要があります。ここをチェックしてください:
mySql の split() メソッドに類似したものはありますか?
次に、重複を削除します (distinct
列に対して a を実行します)。だからあなたは得る:トークンフルーツブック美しい花といい香りのガッド
次に、何らかの形で無効なトークンを削除したい場合があります。これは手動で行うことができます。一連のキーワードまたは辞書に対して自動照合を行う場合があります。たとえば、長さが 1 文字のトークンを削除するなど、何らかのヒューリスティックを適用できます。
その後、2 つのテーブル、元のテーブル (input_data と呼ぶことにしましょう) と、トークンを含む最終的なテーブル t の間で単純に照合を行います。
select item_name, item_des, token
from input_data, t
where item_des like concat('%',t.token,'%')
order by token
次に、次のようなものを取得する必要があります。
item_name item_des token
jasmine beautiful flower & nice smell beautiful
jasmine beautiful flower & nice smell &
jasmine beautiful flower & nice smell nice
jasmine beautiful flower & nice smell smell
rose flower flower
jasmine beautiful flower & nice smell flower
orange gud fruit gud
orange gud fruit fruit
apple fruit fruit
books books books
これがあなたが必要としていたものであることを願っています。