重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
可以用自增字段。你把数据库的数据类型改成int类型,底下就会有个自增字段的勾选框,勾上就可以了。插入数据时就不用加上这个字段,会自动增加的,也是唯一的~
成都创新互联公司主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务墨玉,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
1. 直接在程序中实现;
这应该算是效率最高的一种,也极为方便。直接在你的开发程序中(PHP/ASP/C/...)等中,直接初始化一个变量nRowNum=0,然后在while 记录集时,nRowNum++; 然后输出即可。
2. 使用MySQL变量;在某些情况下,无法通过修改程序来实现时,可以考虑这种方法。
缺点,@x 变量是 connection 级的,再次查询的时候需要初始化。一般来说PHP等B/S应用没有这个问题。但C/S如果connection一只保持则要考虑 set @x=0
mysql select @x:=ifnull(@x,0)+1 as rownum,id,col
- from tbl
- order by col;
+--------+----+------+
| rownum | id | col |
+--------+----+------+
| 1 | 1 | 26 |
| 1 | 3 | 35 |
| 1 | 2 | 46 |
| 1 | 4 | 68 |
| 1 | 6 | 92 |
| 1 | 5 | 93 |
+--------+----+------+
6 rows in set (0.00 sec)
3. 使用联接查询(笛卡尔积)
缺点,显然效率会差一些。
利用表的自联接,代码如下,你可以直接试一下 select a.*,b.* from tbl a,tbl b where a.col=b.col 以理解这个方法原理。
mysql select a.id,a.col,count(*) as rownum
- from tbl a,tbl b
- where a.col=b.col
- group by a.id,a.col;
+----+------+--------+
| id | col | rownum |
+----+------+--------+
| 1 | 26 | 1 |
| 2 | 46 | 3 |
| 3 | 35 | 2 |
| 4 | 68 | 4 |
| 5 | 93 | 6 |
| 6 | 92 | 5 |
+----+------+--------+
6 rows in set (0.00 sec)
4. 子查询
缺点,和联接查询一样,具体的效率要看索引的配置和MySQL的优化结果。
mysql select a.*,
- (select count(*) from tbl where col=a.col) as rownum
- from tbl a;
+----+------+--------+
| id | col | rownum |
+----+------+--------+
| 1 | 26 | 1 |
| 2 | 46 | 3 |
| 3 | 35 | 2 |
| 4 | 68 | 4 |
| 5 | 93 | 6 |
| 6 | 92 | 5 |
+----+------+--------+
6 rows in set (0.06 sec)
做为一款开源的数据库系统,MySQL无疑是一个不做的产品。它的更新速度,文档维护都不逊于几大商业数据库产品。估计在下一个版本中,我们可以看到由MySQL自身实现的ROWNUM。
用mysql查询后,怎样生成名次的顺序号
SELECT 语句中的 Order By 子句,决定返回记录集合的排序方式
例如:
按照【名次】值,从小到大排序
Select * From 表名 Where ...... Order By 名次
按照【名次】值,从大到小排序
Select * From 表名 Where ...... Order By 名次 Desc
$Data=mysqli_fetch_assoc($Result);
改为
$Data=mysqli_fetch_array($Result,MYSQLI_NUM);
即可用序号来获取记录值。请注意,由于序号是从0起算的,所以要想获得$Data中的第3个值,必须用$v=Data[2]
另外还可以用 $Data=mysqli_fetch_array($Result,MYSQLI_BOTH); ,这个时候,既可以用序号获取记录值,也可以用字段名
其实吧,你也可以通过循环对数组$Data进行遍历,不也可以在不知道字段名的情况下把所有值取出来啊?!