-1

2つのテーブルobjectsとがありtags、それぞれobjectにIDがあり、それぞれtagidanameとa parent(オブジェクトのID)があります。

私がやりたいのは、選択してから、共通のタグの数で並べ替えられたobject他のタグを見つけることです。たとえば、最も類似した5つを返します。objectsobjects

編集:

SELECT parent,COUNT(*) as count
FROM `tag` 
WHERE tag="house" OR tag="dog" OR tag="cat" 
GROUP BY parent 
ORDER BY count DESC

これは私が望むことを実行し、このクエリの前に別のクエリでobejctsタグ「house、dog、cat」を見つけることができました。これらの2つのクエリをどのように組み合わせることができるか考えていますか?

4

1 に答える 1

1

1 つのオブジェクトを指定すると、次のようにそのタグを見つけることができます。

 SELECT t1.id
 FROM tags t1
 where t1.parent_id = ?

それに基づいて、そのタグのリストを取得し、それらを共有する他のparent_idを見つけます。

 SELECT parent_id, count(*)
 FROM tags t2
 WHERE EXISTS (
     SELECT t1.id
     FROM tags t1
     WHERE t1.parent_id = ?
     AND t1.id = t2.id
 )
 GROUP BY parent_id

これにより、他のparent_idが共有するタグの数がわかります。

ORDER BY count(*) desc「最も類似した」行を最初に見つけたい場合は、これを行うことができます。

それが役立つことを願っています。

于 2012-10-13T21:19:12.643 に答える