【发布时间】:2014-01-17 19:34:50
【问题描述】:
我不确定这个 MySQL 查询在 JPQL 中的外观如何。 详情:
select title
from post
order by (
select count(postId)
from comment
where comment.postId=post.id
) desc;
编辑: 后表外观:
mysql> desc post;
+---------------+----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+----------------+------+-----+---------+----------------+
| post_id | int(11) | NO | PRI | NULL | auto_increment |
| post_content | varchar(50000) | NO | | NULL | |
| post_date | datetime | NO | | NULL | |
| post_summary | varchar(1000) | YES | | NULL | |
| post_title | varchar(300) | NO | | NULL | |
| post_visitors | int(11) | NO | | NULL | |
| user_id | int(11) | NO | MUL | NULL | |
| category_id | int(11) | NO | MUL | NULL | |
+---------------+----------------+------+-----+---------+----------------+
评论表外观:
mysql> desc comment;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| comment_id | int(11) | NO | PRI | NULL | auto_increment |
| comment_content | varchar(600) | NO | | NULL | |
| comment_date | datetime | NO | | NULL | |
| comment_title | varchar(300) | NO | | NULL | |
| user_id | int(11) | NO | MUL | NULL | |
| post_id | int(11) | NO | MUL | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
这是mysql,终端中的命令。
mysql> select post_title from post order by (select count(post_id) from comment where comment.post_id=post.post_id) desc;
我试过了,但它不起作用:
SELECT p FROM Post p ORDER BY
(SELECT c COUNT(c.getPost().getId())
from Comment c
where c.getPost().getId()=p.getId())
desc
【问题讨论】:
-
我正在尝试获取按 cmets 计数排序的帖子。评论最多的帖子在前。
-
我没有使用 JPQL,但是从文档来看它看起来很像普通的 SQL。在 docs.oracle.com 的任何示例中,我都没有看到像
getPost()这样的方法调用。不能正常访问列吗? -
@Barmar 嗯,这些表是用 JPA 映射到 mysql 数据库的。因此,getXXX() 是相应类中的 getter 方法。这实际上是 NamedQuery 注解的查询参数中的内容。
-
据我所知,JPQL 负责映射,您使用普通的
table.column语法编写查询。我怀疑您所要做的就是将查询重写为普通连接,而不是在ORDER BY子句中使用相关子查询。我会在答案中显示我的建议。