我不认为有一种标准方式,但这种方法似乎值得尝试.
想法是为视图动态生成唯一的“id”值(类似于rownum).来自Create a view with column num_rows – MySQL的功能的一点修改版本(为了重置rownum而进行的修改):
delimiter //
CREATE FUNCTION `func_inc_var_session`( val int) RETURNS int
NO SQL
NOT DETERMINISTIC
begin
if val = 0 THEN set @var := -1; end if;
SET @var := IFNULL(@var,0) + 1;
return @var;
end
//
假设我们有一个视图定义(为简化说明而过于简化)
CREATE VIEW v_test1
SELECT a.field1
FROM test_table a
将其修改为
CREATE VIEW v_test1
SELECT a.field1, func_inc_var_session(0) as rownum
FROM test_table a
会做的;但是,在一个会话中多次运行select * from v_test将为您提供连续的rownums,例如第一次以1开头,第二次以视图中的记录数等开始.
要重置rownum,我创建另一个视图(因为mysql视图限制 – 它不能在FROM中有子查询):
CREATE VIEW v_reset AS SELECT func_inc_var_session(1);
现在我们可以做到
CREATE VIEW v_test1
SELECT a.field1, func_inc_var_session(0) as rownum
FROM test_table a, v_reset
(首先处理FROM子句,func_inc_var_session(1)将在查询期间执行一次,因此它将重置rownum).
我希望它有所帮助.