0

ユーザーが複数のタグを挿入して特定のエンティティを検索できるタグベースの検索を実装しています。1つのエンティティに同じ数のタグを含めることができます。ただし、ユーザーが検索したすべてのタグを結果に表示する必要はありません。

たとえば、ユーザーが「靴」、「革」、「フォーマル」などの3つのタグを入力した場合、これらのタグを1つ以上持つすべてのエンティティをリストに含めることができます。

unionを使用して、これらのキーワードのいずれかを持つエンティティの完全なリストを返していますが、問題は、カテゴリで見つかったタグの数に従ってそれらを並べ替えたいということです。

たとえば、「Shoes」、「leather」、「formal」の3つのタグすべてを持つエンティティは、そのうちの1つまたは2つだけを持つエンティティよりも上に来る必要があります。この種の検索を実行するためのSQL機能はありますか?

[編集]

私のテーブルレイアウトは次のとおりです。

エンティティテーブル

  • Entity_name
  • Entity_id(auto inc主キー)

タグテーブル

  • 鬼ごっこ
  • Entity_id

私の目的を解決することができません。このクエリを今すぐ使用する:

select entity.entity_name from entity.entity_id join tags on tags.entity_id=entity.entity_id where tags.tag="first tag"
union 
select entity.entity_name from entity.entity_id join tags on tags.entity_id=entity.entity_id where tags.tag="second tag"
union 
select entity.entity_name from entity.entity_id join tags on tags.entity_id=entity.entity_id where tags.tag="third tag"

私が言ったように、これは私の目的を解決していません。

4

1 に答える 1

1

これはあなたのためにそれをするはずです:

 select entity_name, count(*) count
   from (
         select e.entity_name, t.tag
           from tag t
           join entity e on (t.entity_id = e.entity_id)
          where t.tag in ('tag', 'tag', 'tag')
         )x
  group by entity_name
  order by count desc

一致したタグをエンティティごとにカウントし、最も一致度の高いものから順に並べ替えます。

ブールスタイルの全文マッチングは、このような機能を提供することにも注意してください。

于 2012-09-18T23:29:11.283 に答える