2015-03-31 130 views
0

如果我有一个如下定义的表格:mytable(model char(4), price int);并且我试图找到与给定基准价格的价格最接近的价值,那么我该如何去做呢?SELECT INTO with LIMIT

什么我是这样的:

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// 

为什么我不能有一个线?
如何从循环中的当前行中选择价格并将其保存到我声明的变量中?我认为这会起作用,但事实并非如此。

回答

1

你可以找到最接近的价格为基准价格与单查询:

SELECT model,price,(ABS(price-basePrice)) AS price_diff FROM mytable ORDER BY price_diff LIMIT 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列表 以下...

+0

改变,仍然留给我一个错误 – ZWiki 2015-03-31 16:05:12

+0

这是什么*错误*阅读!!? – 2015-03-31 16:08:05

+0

'错误1064(42000):您的SQL语法错误;检查对应于你的MySQL服务器版本的手册,在'row,1'附近使用正确的语法;' – ZWiki 2015-03-31 16:09:30