编辑:请在下面查看我的修改
在我之前提到的问题link之后,我决定创建一个变量和一个函数来返回该变量,并在create view语句中使用该函数。
所以,我把变量称为零:
SET @auxvar := 0;
然后我宣布了这个函数:
create function auxfunc()
returns INTEGER DETERMINISTIC NO SQL return @auxvar+1;
然后我这样做:
CREATE OR REPLACE VIEW vwaux (mac, ip, num_row)
AS SELECT testing.mac, testing.ip, auxfunc() AS row_number
FROM testing
order by ip;
但生成的视图包含以下数据:
| mac | ip | row_number |
----------------------------------------
| s23Ssad2 | 192.168.1.1 | NULL |
| sd57shgd | 192.168.1.88 | NULL |
| adfsfy65 | 192.168.1.91 | NULL |
| at56ss34 | 192.168.1.92 | NULL |
依此类推......但是我期待它是1,2,3,4 ...它有NULL。有关如何修复此NULL的任何想法吗?
编辑部分:------------------------------
我已经设法获得了NULL,但仍然没有达到我需要的程度。 我将函数更改为接受输入参数,并在函数内部将其递增一个单位。
这是新功能:
CREATE FUNCTION auxfunc(param INT) RETURNS int(11)
NO SQL
DETERMINISTIC
begin
set param = param +1;
return param;
end
然后我将视图创建为:
CREATE OR REPLACE VIEW vwaux (mac, ip, num_row)
AS SELECT testing.mac, testing.ip, auxfunc(0) AS row_number
FROM testing
order by ip;
但是我得到'1'而不是NULL。像这样:
| mac | ip | row_number |
----------------------------------------
| s23Ssad2 | 192.168.1.1 | 1 |
| sd57shgd | 192.168.1.88 | 1 |
| adfsfy65 | 192.168.1.91 | 1 |
| at56ss34 | 192.168.1.92 | 1 |
仍然不是1,2,3,4,5,6 ......
答案 0 :(得分:0)
mysql函数不通过引用获取参数。您的本地函数无法更改变量的全局值。 您可以改为将row_number定义为auto_increment字段的临时表,并在该表中选择您的查询:
drop table if exists __temp;
create table __temp (mac text, ip text, row_number integer primary key auto_increment);
insert into __temp (mac, ip) select testing.mac, testing.ip;
select * from __temp;