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。
SELECT @rownum:=@rownum+1 AS rownum, tablename.*
FROM (SELECT @rownum:=0) r, tablename
為每一行記錄添加行號
方法一:為了實現row_number函數功能,此方法我們要使用到會話變量,下面的實例是從 employees 表中選出5名員工,并為每一行添加行號:
1
2
3
4
5
6
SET@row_number = 0;
SELECT
(@row_number:=@row_number + 1) ?ASnum, firstName, lastName
FROM
employees
LIMIT ?5;
輸出結果:
在這個實例中:首先,定義變量 @row_number ,并初始化為0;然后,在查詢時我們為 @row_number 變量加1
方法二:這種方法仍然要用到變量,與上一種方法不同的是,我們把變量當做派生表,與主業務表關聯查詢實現row_number函數功能。下面我們仍然以查詢5位員工為例:
1
2
3
4
5
SELECT
(@row_number:=@row_number + 1) ASnum, firstName, lastName
FROM
employees,(SELECT@row_number:=0) ASt
LIMIT 5;
這樣的輸出結果與上一種結果是一致的。需要注意的是,在這種方法中,派生表必須要有別名,否則執行時會出錯。為每一組添加行號。了解ORACLE的朋友應該知道,row_number函數還有一個非常有用的功能就是分組排序 “over partition by” 。MySQL同樣可以實現這樣的功能,看下面的實例:首先將payments表中按照客戶將記錄分組:
1
2
3
4
5
SELECT
customerNumber, paymentDate, amount
FROM
payments
ORDERBYcustomerNumber;
輸出結果如下:下面我們需要將每個客戶添加一個行號,這里我們需要用到兩個變量,一個用于存儲行號,一個用于存儲客戶編號,如:
1
2
3
4
5
6
7
8
9
10
11
SELECT
@row_number := CASE
WHEN@customer_no = customerNumber ?THEN@row_number + 1
ELSE1
ENDASnum,
@customer_no := customerNumber ?asC
根據具體問題類型,進行步驟拆解/原因原理分析/內容拓展等。
具體步驟如下:/導致這種情況的原因主要是……
可以用自增字段。你把數據庫的數據類型改成int類型,底下就會有個自增字段的勾選框,勾上就可以了。插入數據時就不用加上這個字段,會自動增加的,也是唯一的~
當前標題:mysql怎么編號,mysql的編碼格式
網頁地址:http://vcdvsql.cn/article36/hecipg.html
成都網站建設公司_創新互聯,為您提供云服務器、面包屑導航、App開發、移動網站建設、響應式網站、網站設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯