【发布时间】:2019-04-12 19:56:24
【问题描述】:
我在这里找到了一些帖子和一些答案。我已经尝试了每一个结果都不好。我不想使用存储过程。
我在 Java 中使用 Hibernate 和 MySQL。我的一些查询字符串是:
SET @rank = 0;
SET @limit = 0.1;
SELECT (@limit := ROUND(COUNT(id) * @limit)) FROM Pics;
SELECT Q1.popularity FROM Pics AS p INNER JOIN (
SELECT IF((@rank := @rank + 1) <= @limit, true, false) AS 'popularity', p.id
FROM Pics AS p
ORDER BY p.points DESC
) AS Q1 ON Q1.id = p.id WHERE p.id = 7;
有人说解决方案是在查询中使用/*'*/:=/*'*/ (post),但这对我不起作用:
SET @rank = 0;
SET @limit = 0.1;
SELECT (@limit /*'*/:=/*'*/ ROUND(COUNT(id) * @limit)) FROM Pics;
SELECT Q1.popularity FROM Pics AS p INNER JOIN (
SELECT IF((@rank /*'*/:=/*'*/ @rank + 1) <= @limit, true, false) AS 'popularity', p.id
FROM Pics AS p
ORDER BY p.points DESC
) AS Q1 ON Q1.id = p.id WHERE p.id = 7;
我绝望了!
有什么想法吗?不胜感激!
谢谢!
【问题讨论】:
-
你的查询背后的逻辑是什么?
-
别想了,只是一个例子。这不是完整的查询,只有带有“:=”字符的代码。
-
嗯,我正在考虑。特别是,我认为您应该避免在 Hibernate 中使用会话变量,也许我可以给您一个解决方法。
-
好的,我将编辑查询并放入原始示例。