如果我有一个如此定义的表:mytable(model char(4), price int);
并且我试图在给定基本价格的情况下找到最接近价格的值,我该怎么做呢?
我拥有的是:
delimiter //
CREATE FUNCTION findClosestPrice (value int) returns int
BEGIN
DECLARE closestPrice int default -1;
DECLARE row int default 0;
DECLARE rows int default 0;
DECLARE currPrice int default -1;
select count(*) from mytable into rows;
SET row=0;
WHILE row < rows DO
select price from mytable limit row, 1 into currPrice; <----- this gives an error
SET row = row + 1;
END WHILE;
END//
为什么我不能拥有那条线? 如何从循环中的当前行中选择价格并将其保存到我声明的变量中?我认为这样可行,但事实并非如此。
答案 0 :(得分:1)
您可以使用单个查询找到与基本价格最接近的价格:
SELECT model,price,(ABS(price-basePrice)) AS price_diff FROM mytable ORDER BY price_diff LIMIT 1
答案 1 :(得分:0)
into
必须遵循from
之前的列名称。
更改:
select price from mytable limit row, 1 into currPrice;
致:
select price into currPrice from mytable limit row, 1;
请参阅:
SELECT Syntax
... INTO子句可以如图所示出现 语法描述或紧跟在 select_expr 列表之后 ...