0

我想检索特定用户的所有帖子中使用的标签计数。例如,如果一个用户写了三个帖子,并且两个帖子被标记为“someTag”,那么查询应该将标签“someTag”的计数写为 2

用户和帖子之间存在一对多的关系。帖子和标签之间存在多对多的关系我正在使用 eclipseLink for jpa 我为它编写了这个 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 回答