我不認為有一種标準方式,但這種方法似乎值得嘗試.
想法是為視圖動态生成唯一的“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).
我希望它有所幫助.