データベースが「キーワード」を行に入れるのではなく、区切られた長い文字列フィールドを使用する必要がある場合は、LIKE 演算子を使用する必要があります。
[keywords]
列が次のようにフォーマットされていると仮定します。
「チョコレート、ガナッシュ、ストロベリー」
「似ている」ケーキは次のように検索できます。
SELECT
columns
FROM
table t
WHERE
t.[keywords] LIKE '%chocolate%'
OR t.[keywords] LIKE '%cheesecake%'
ただし、スキーマを変更できる場合は、そうします。正規化されたキーワード行の検索は、DB がテキストを使用して解析するよりもはるかに効率的かつ高速です。LIKE
keywords
親テーブルを ID で参照するtableを作成できれば、a を使用して等値検索を行うことができますJOIN
。これは優れていると思います。
ID、ParentId、Keyword の 3 つの列がある場合があります。
編集:更新に基づいて、cakewords
検索可能なテーブルがあります。
IN
これはテストされておらず、句を使用しないより効率的な方法がある可能性があります。しかし、アイデアは、特定のケーキのすべてのキーワード ID を知っているということです。次に、そのコレクション内のキーワードを持つ他のケーキを探しています。
SELECT
columns
FROM
cake AS cs
JOIN
cakewords AS csw
ON csw.[cakeid] = cs.[id]
WHERE
csw.[wordid] IN
(SELECT
cw.[wordid]
FROM
cakewords AS cw
JOIN
cakes AS c
ON c.[id] = cw.[cakeid]
WHERE
c.[id] = @pMyCurrenctCakeId
(
EDIT2:これは良い関連する質問です:
タグ/キーワード マッチングの最適なソリューションは何ですか?
内の回答に基づいて、これを試すことができます:
SELECT DISTINCT
c.[id]
FROM
cakewords AS cw1
INNER JOIN cakewords cw2
ON cw2.[wordid] = cw1.[wordid]
INNER JOIN cake AS c
ON c.[id] = cw.[cakeid]
WHERE
cw1.[cakeid] = @current_cake_id