MySQL中在查詢成果集中獲得記載行號的辦法。本站提示廣大學習愛好者:(MySQL中在查詢成果集中獲得記載行號的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中在查詢成果集中獲得記載行號的辦法正文
假如須要在查詢語句前往的列中包括一列表現該筆記錄在全部成果集中的行號, ISO SQL:2003 尺度提出的辦法是供給 ROW_NUMBER() / RANK() 函數。 Oracle 中可使用尺度辦法(8i版本以上),也能夠應用非尺度的 ROWNUM ; MS SQL Server 則在 2005 版本中供給了 ROW_NUMBER() 函數;但在 MySQL 中仿佛還沒有如許的體系自帶功效。固然 LIMIT 可以很便利的對前往的成果集數目和地位停止過濾,但過濾出來的記載的行號卻沒方法被 SELECT 到。聽說 MySQL 是早就想增長這個功效了,但我是還沒找到。
處理辦法是經由過程預界說用戶變量來完成:
set @mycnt = 0;
select (@mycnt := @mycnt + 1) as ROWNUM , othercol from tblname order by othercol;
如許查詢出來的成果集中 ROWNUM 就保留了行編號信息。這個行編號信息的某種用處在於當你須要依據須要對數據依照某種規矩排序並掏出排序以後的某一行數據,而且願望曉得這行數據在之前排序中的地位時就用得著了。好比:
set @mycnt = 0;
select * from (
select (@mycnt := @mycnt + 1) as ROWNUM , othercol
from tblname order by othercol
) as A where othercol=OneKeyID;
固然你也能夠經由過程創立暫時表的辦法把查詢成果寫到某個具有 auto_increment 字段的暫時表中再做查詢,但斟酌莅臨時表在 MySQL master / slave 形式下能夠發生的成績,用如許暫時用戶界說變量的方法來盤算查詢成果集每行對應的行號照樣更加簡練 -- 除非你情願在 PHP 或其他說話劇本中對前往的全部成果集再作處置。