0

実際にはまだ提供するコードはありません..しかし、操作しようとしているデータを提供できます。

タグ/キーワードのセットを使用しています。キーワードは、「related_id」列を介して別のキーワードに関連付けることができます。

したがって、私のテーブルは次のようになります。

キーワード_tbl: keyword_id | keyword | related_id

この例では、テーブルに次のエントリが入力されているとします。

Entry 1:
keyword_id : 1
keyword: Marathons
related_id: 0

Entry 2:
keyword_id : 2
keyword: Boston
related_id: 1

ご覧のとおり、ボストンのこのエントリは、 related_id を介して Marathons に関連付けられています。

ユーザーに検索機能を提供することに取り組んでいます。個々の用語を検索する場合、それは簡単なことであり、問​​題ではありません。しかし、彼らが「ボストン マラソン」を検索すると、クエリに問題が生じます。

SELECT * FROM keyword WHERE keyword LIKE "%boston%" OR keyword LIKE "%marathon%"

この最初のクエリの後、結果を比較したいと思います。これは、上で詳述した 2 つのエントリになります。

他に関連する用語のみを返したいと思います。この場合、ボストンは「最小の」公分母なので、それを返したいと思います。

想像してみてください: マラソン -> ボストン

これは単一のクエリで実行できますか?

ありがとう!

4

2 に答える 2

1

私はこのようなことがうまくいくかもしれないと考えています:

SELECT
  a.*
FROM keyword a
JOIN keyword b
ON (a.related_id = b.keyword_id)
WHERE (a.keyword LIKE "%boston%"
       OR a.keyword LIKE "%marathon%")
AND (b.keyword LIKE "%boston%"
       OR b.keyword LIKE "%marathon%")
于 2013-01-08T19:16:26.367 に答える
0

以下のクエリは、答え Marathons -> Boston を提供します。関係のないキーワードがある場合は IceCream と表示されます ->

SELECT resultset1.keyword,'->',IF(resultset2.keyword IS NOT NULL,resultset2.keyword,'')
FROM
    (SELECT * FROM keyword WHERE keyword LIKE "%boston%" OR keyword LIKE "%marathon%")
     as resultset1
LEFT JOIN
    (SELECT * FROM keyword WHERE keyword LIKE "%boston%" OR keyword LIKE "%marathon%")
as resultset2
on resultset1.keyword_id=resultset2.related_id;
于 2013-01-08T19:16:40.000 に答える