/ 中存储网

如果在MySQL数据库中查询行号

2014-07-13 16:29:26 来源:中存储网
MySQL查询行号的实现方法不止一种,下面为您介绍的就是使用函数实现MySQL查询行号的方法,如果您对此方面感兴趣的话,不妨一看。
mysql5中使用函数实现MySQL查询行号,原理和使用变量差不多 。
下面MySQL查询行号过程的目的是获得整型包含行的数量的结果集,类似其他DBMS中的ROWNUM()。我们需要一个用户变量来保存在每次调用rno()后的结果,就命名为@rno吧。
CREATE FUNCTION rno ()   
RETURNS INT   
BEGIN   
SET @rno = @rno + 1;   
RETURN @rno;   
END;   
通过rno()方法的SELECT我们获得了行数。下面是调用程序的结果:
mysql> SET @rno = 0;//   
Query OK, 0 rows affected (0.00 sec)   
mysql> SELECT rno(),s1,s2 FROM t;//   
+-------+------+------+   
| rno() | s1 | s2 |   
+-------+------+------+   
| 1 | 1 | a |   
| 2 | 2 | b |   
| 3 | 3 | c |   
| 4 | 4 | d |   
| 5 | 5 | e |   
+-------+------+------+   
5 rows in set (0.00 sec)   
在SELECT中将@rno置零的技巧是使用了WHERE的求值功能,而这个特性在今后的MySQL中可能丢失。
CREATE FUNCTION rno_reset ()   
RETURNS INTEGER   
BEGIN   
SET @rno = 0;   
RETURN 1;   
END;   
SELECT rno(),s1,s2 FROM t WHERE rno_reset()=1;//   
实例如下:
mysql> use db5   
Database changed   
mysql> delimiter //   
mysql> CREATE FUNCTION rno ()   
-> RETURNS INT   
-> BEGIN   
-> SET @rno = @rno + 1;   
-> RETURN @rno;   
-> END;//   
Query OK, 0 rows affected (0.42 sec)   
mysql> set @rno = 0;   
-> //   
Query OK, 0 rows affected (0.00 sec)   
mysql> select rno(),s1 from t;//   
+-------+------+   
| rno() | s1 |   
+-------+------+   
| 1 | 6 |   
| 2 | 6 |   
| 3 | 0 |   
| 4 | 19 |   
| 5 | 19 |   
| 6 | 1 |   
| 7 | 2 |   
| 8 | 3 |   
| 9 | 4 |   
| 10 | 0 |   
| 11 | 1 |   
| 12 | 2 |   
| 13 | 4 |   
+-------+------+   
13 rows in set (0.06 sec)   
mysql> CREATE FUNCTION rno_reset ()   
-> RETURNS INTEGER   
-> BEGIN   
-> SET @rno = 0;   
-> RETURN 1;   
-> END;//   
Query OK, 0 rows affected (0.01 sec)   
mysql> select rno(),s1 from t where rno_reset()=1;//   
+-------+------+   
| rno() | s1 |   
+-------+------+   
| 1 | 6 |   
| 2 | 6 |   
| 3 | 0 |   
| 4 | 19 |   
| 5 | 19 |   
| 6 | 1 |   
| 7 | 2 |   
| 8 | 3 |   
| 9 | 4 |   
| 10 | 0 |   
| 11 | 1 |   
| 12 | 2 |   
| 13 | 4 |   
+-------+------+   
13 rows in set (0.13 sec)