0

特定のユーザーのすべての投稿で使用されているタグの数を取得したいと考えています。たとえば、1 人のユーザーが 3 つの投稿を書き、2 つの投稿が「someTag」でタグ付けされている場合、クエリはタグ「someTag」のカウントを 2 として書き込む必要があります。

ユーザーと投稿の間には一対多の関係があります。投稿とタグの間には多対多の関係があります。jpa に eclipseLink を使用しています。この jpa クエリを次のように記述しました。

SELECT COUNT(tag.tagName)  FROM Post post, Tag tag JOIN tag.posts posts WHERE post.user = :user AND tag.tagName = :tagName

しかし、これは私にタグの乗算を与えており、私が9つの投稿にタグを付けたすべての投稿に「友達」というタグを付けており、合計17の投稿があり、得られる結果は153、つまりそれらの乗算です。

次のように簡単なmysqlクエリを試しました

SELECT COUNT(*)
FROM Tag t
JOIN post_tag pt ON pt.idTag = t.idtag
JOIN Post p ON pt.idpost = p.idpost
JOIN User u ON p.iduser = u.iduser
WHERE u.username = 'prasadkharkar'
AND t.tagName = 'friends'

これは問題なく動作し、結果は 9 になります。

jpa クエリでこのような結果が必要です。私がやっている間違ったことを説明してもらえますか?

4

1 に答える 1

1

投稿とタグから選択することで、デカルト積を実行しています。SQL クエリと同じように実行し、結合を使用します。

select count(tag.tagName) 
from Tag tag
join tag.posts post 
where post.user = :user 
and tag.tagName = :tagName
于 2013-05-02T14:27:47.980 に答える