看你的意思行號就是顯示順序號,你的查詢結果可以按id升序排序(order by id),這樣查詢結果的順序就是顯示的順序,這個行號可以在程序里加上,不用在數(shù)據(jù)庫操作。另外最好是加上一個排序值得字段,這樣可以隨時調整顯示順序。
專注于為中小企業(yè)提供成都網(wǎng)站設計、成都做網(wǎng)站服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)望都免費做網(wǎng)站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。
Oracle 中可以使用標準方法(8i版本以上),也可以使用非標準的 ROWNUM ; MS SQL Server 則在 2005 版本中提供了 ROW_NUMBER() 函數(shù);但在 MySQL 中似乎還沒有這樣的系統(tǒng)自帶功能。 解決方法是通過預定義用戶變量來實現(xiàn): mysql set @mycnt = 0; mysql select (@mycnt := @mycnt + 1) as ROWNUM ,NAME fromCHARBASE LIMIT 100; 這樣查詢出來的結果集中 ROWNUM 就保存了行編號信息。這個行編號信息的某種用途在于當你需要根據(jù)需要對數(shù)據(jù)按照某種規(guī)則排序并取出排序之后的某一行數(shù)據(jù),并且希望知道這行數(shù)據(jù)在之前排序中的位置時就用得著了。 為了方便,我們通常將兩句合起來執(zhí)行,以避免變量全局自增:
mysql本身是沒有行號的。要想得到查詢語句返回的列中包含一列表示該行記錄在整個結果集中的行號可以通過自定義set一個變量,然后每條記錄+1的方式,返回這個變量的值。
舉例:
表名為:s_ave
表的內容:
Ave Avename
1 d
3 e
4 a
6 b
5 e
我們要查詢 ave=6 的行號:
set @mytemp = 0;
select * from (
SELECT (@mytemp:=@mytemp+1) as newid,Ave,Avename FROM s_ave
) AS A
WHERE A.Ave=6
自己試一下吧,這里 mytemp 的值就是行號
轉自:
SELECT
b.*
FROM
article
LEFT?JOIN?(
SELECT
@rownum?:=@rownum?+?1?AS?rownum,
article.*
FROM
(SELECT?@rownum?:=?0)?r,
article
)?b?ON?article.id?=?b.id
mysql沒有rownum,只能這樣進行計算
為每一行記錄添加行號
方法一:
為了實現(xiàn)row_number函數(shù)功能,此方法我們要使用到會話變量,下面的實例是從 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;
然后,在查詢時我們?yōu)?@row_number 變量加1。
方法二:
這種方法仍然要用到變量,與上一種方法不同的是,我們把變量當做派生表,與主業(yè)務表關聯(lián)查詢實現(xiàn)row_number函數(shù)功能。下面我們仍然以查詢5位員工為例:
1
2
3
4
5
SELECT
(@row_number:=@row_number + 1) ASnum, firstName, lastName
FROM
employees,(SELECT@row_number:=0) ASt
LIMIT 5;
這樣的輸出結果與上一種結果是一致的。
需要注意的是,在這種方法中,派生表必須要有別名,否則執(zhí)行時會出錯。
為每一組添加行號
了解ORACLE的朋友應該知道,row_number函數(shù)還有一個非常有用的功能就是分組排序 “over partition by” 。MySQL同樣可以實現(xiàn)這樣的功能,看下面的實例:
首先將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