現在、2 つのレコード間の類似性を計算する方法を見つけようとしています。私の最初のレコードは、非アクティブ化された広告からのものです。そのため、たとえば、いくつかの VARCHAR フィールドの同等性に関して最も類似した 10 個の広告を見つけたいと考えています。
私が理解できないことは、MySQL関数があれば、それが何らかの形で私を助けることができるかどうか、または文字列を奇妙な方法で比較する必要があるかどうかです。
編集#1
類似性は、次のフィールドによって定義されます。
タイトル (重量: 50 %)
含有量(重量:40%)
カテゴリ (重量: 10 %)
編集#2
私は計算を次のようにしたい:
タイトル: タイトル フィールドに一致する単語 (2 文字を超える単語のみが一致します)。
説明: タイトル フィールドに一致する単語 (2 文字を超える単語のみが一致します)。
カテゴリ: カテゴリに一致し、それが一致しない場合は、重みの少ない親カテゴリに一致します:)
これの方程式は次のようになります。
#1 は古い非アクティブな投稿、#2 はアクティブな投稿です。
#2 のタイトルは、#2 の合計 10 語のうち 3 語で #1 のタイトルと一致します。これにより、30% 一致 = 30 ポイントが得られます。
#2 の説明は、#2 の合計 400 語のうち 10 語で #1 の説明と一致します。これにより、4 % 一致 = 4 ポイントが得られます。
#2 のカテゴリは #1 のカテゴリと一致しないため、一致率は 0% です。それは0ポイントを与えます。
その場合、合計は #2 の 34 ポイントになります。:)
編集 #3
これが私のクエリですが、異なる行は返されませんが、多くの同じ行が返されます。
SELECT
a.AdvertisementID as A_AdvertisementID,
IF(a.Topic LIKE a2.Topic, 50, 0) + IF(a.Description LIKE a2.Description, 40, 0) + IF(a.Cate_CategoryID LIKE a2.Cate_CategoryID, 10, 0) as A_Score,
a.AdvertisementID as A_AdvertisementID,
a.Topic as A_Topic,
LEFT(a.Description, 300) as A_Description,
a.Price as A_Price,
a.Type as A_Type
FROM
".DB_PREFIX."A_Advertisements a2,
".DB_PREFIX."A_Advertisements a
WHERE
a2.AdvertisementID <> a.AdvertisementID
AND
a.AdvertisementID = :a_id
ORDER BY
A_Score DESC