作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 MySQL 5.7 中的存储过程和有用的弹出式编辑器的新手。我有一个查询在放入常规 SQL 编辑框中时有效,但在我尝试从中创建存储过程时失败。我怀疑 @rank:=@rank+1
是问题所在,但当然 MySQL 在缩小范围方面帮助不大。
重点是简单地按字段 (ccstr
) 对某些行进行排序,然后选择项目 #N,其中 N 是输入参数。
这就像直接 SQL 一样,用一个值替换 N,比如 3
SET @rank:=0;
SELECT ccstr FROM
( SELECT @rank:=@rank+1 AS rank, ccstr
FROM cards
ORDER BY ccstr ASC) as B
WHERE B.rank = N;
我试过使用弹出式编辑器,以及我能想到的各种混合搭配,例如以下,但都失败了:
DELIMITER //
CREATE PROCEDURE readnth
(IN NDX INT)
DECLARE @rank INT;
SET @rank := 0;
SELECT ccstr FROM
(select @rank:=@rank +1 as rank, ccstr from cards
order by ccstr ASC)
as b where b.rank=ndx;
end //
delimiter ;
对于这里的一般问题是什么的任何帮助将不胜感激!
最佳答案
删除行:
DECLARE @rank INT;
不能声明以@
开头的变量。
另一种编码方式是使用准备好的语句:
PREPARE stmt FROM CONCAT('SELECT ccstr FROM cards ORDER by ccstr LIMIT ', (ndx+1), ', 1');
EXECUTE stmt;
您必须使用准备好的语句,因为 LIMIT
的参数必须是常量,而不是表达式。
关于MySQL 5.7 存储过程语法错误,通过 phpadmin 和 Ubuntu 16.04,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41771727/
我想将数据从 Excel 电子表格复制到 MySQL。该数据将导入到 gcloud 应用程序引擎,我已经部署了一个实时网站 - 这是数据可见的地方。我正在使用框架 Tornado 。目前我正在努力将数
我是 MySQL 5.7 中的存储过程和有用的弹出式编辑器的新手。我有一个查询在放入常规 SQL 编辑框中时有效,但在我尝试从中创建存储过程时失败。我怀疑 @rank:=@rank+1 是问题所在,但
我是一名优秀的程序员,十分优秀!