0

编辑:请在下面查看我的编辑

根据我之前在这里提出的问题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;

但是我得到的不是NULL,而是'1'。像这样:

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

4

1 回答 1

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;
于 2013-04-10T08:24:11.990 回答