新聞中心
如果需要在查詢語句返回的列中包含一列表示該條記錄在整個(gè)結(jié)果集中的行號(hào), ISO SQL:2003 標(biāo)準(zhǔn)提出的方法是提供 ROW_NUMBER() / RANK() 函數(shù)。 Oracle 中可以使用標(biāo)準(zhǔn)方法(8i版本以上),也可以使用非標(biāo)準(zhǔn)的 ROWNUM ; MS SQL Server 則在 2005 版本中提供了 ROW_NUMBER() 函數(shù);但在 MySQL 中似乎還沒有這樣的系統(tǒng)自帶功能。雖然 LIMIT 可以很方便的對(duì)返回的結(jié)果集數(shù)量和位置進(jìn)行過濾,但過濾出來的記錄的行號(hào)卻沒辦法被 SELECT 到。據(jù)說 MySQL是早就想增加這個(gè)功能了,但我是還沒找到。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、大安網(wǎng)站維護(hù)、網(wǎng)站推廣。
解決方法是通過預(yù)定義用戶變量來實(shí)現(xiàn):
set @mycnt = 0;
select (@mycnt := @mycnt + 1) as ROWNUM , othercol from tblname order by othercol;
這樣查詢出來的結(jié)果集中 ROWNUM 就保存了行編號(hào)信息。這個(gè)行編號(hào)信息的某種用途在于當(dāng)你需要根據(jù)需要對(duì)數(shù)據(jù)按照某種規(guī)則排序并取出排序之后的某一行數(shù)據(jù),并且希望知道這行數(shù)據(jù)在之前排序中的位置時(shí)就用得著了。比如:
set @mycnt = 0;
select * from (
select (@mycnt := @mycnt + 1) as ROWNUM , othercol
from tblname order by othercol
) as A where othercol=OneKeyID;
當(dāng)然你也可以通過創(chuàng)建臨時(shí)表的方法把查詢結(jié)果寫到某個(gè)擁有 auto_increment 字段的臨時(shí)表中再做查詢,但考慮到臨時(shí)表在 MySQL master / slave 模式下可能產(chǎn)生的問題,用這樣臨時(shí)用戶定義變量的方式來計(jì)算查詢結(jié)果集每一行對(duì)應(yīng)的行號(hào)還是更為簡(jiǎn)潔 -- 除非你愿意在 PHP 或其他語言腳本中對(duì)返回的整個(gè)結(jié)果集再作處理。
網(wǎng)頁標(biāo)題:如何在MySQL查詢結(jié)果集中得到記錄行號(hào)
文章位置:http://www.5511xx.com/article/coddcsh.html


咨詢
建站咨詢
