我有一个复杂的查询需要一个排名。我已经了解到,这样做的标准方式是使用本页上的技术:http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/。我使用Infobright作为后端,并不像预期的那样工作。也就是说,一个标准的MySQL引擎会显示1,2,3,4等等...... Brighthouse(Infobright的引擎)会返回1,1,1,1等....所以我想出了设置变量,函数的策略,然后在查询中执行它。这里的概念查询的证明了这一点:如何在Jasper Reports中执行多个mysql查询(不是你认为的......)
SET @rank = 0;
DROP FUNCTION IF EXISTS __GetRank;
DELIMITER $$
CREATE FUNCTION __GetRank() RETURNS INT
BEGIN
SET @rank = @rank + 1;
return @rank;
END$$
DELIMITER ;
select __GetRank() AS rank, id from accounts;
我然后复制并粘贴功能分为碧玉报告的iReport的,然后编译我的报告。执行它后,我得到语法错误。所以我认为也许是;正在抛弃它。所以在查询的顶部,我放入了DELIMITER;这也没有用。
我想甚至有可能做什么?如果是这样,怎么样?如果有一种Infobright获得排名而不写功能的方式,我也会接受。
谢谢你的答案,但它不完全是我要找的。这是很好的MySQL,但不使用brighthouse(Infobright)引擎。它会在brighthouse中为所有元素显示等级1。 – 2011-04-14 15:15:46
你测试过了吗?因为那么输出应该是全0不是1的。 – Johan 2011-04-14 15:21:39
或者,您可以编写写入临时表的存储过程,然后读取临时表。 – Johan 2011-04-14 15:51:10