2013年6月13日 星期四

MySQL 模擬 SELECT TOP 20 PERCENT * 指令的方法

ACCESS 或 SQL Server 資料庫提供的 TOP n 與 TOP n PERCENT 功能非常方便 (雖然他們都不是標準 SQL 指令) :

  1. 選取資料表的前 100 筆紀錄 : SELECT TOP 100 * FROM users
  2. 選取資料表的前 20% 筆紀錄 : SELECT TOP 20 PERCENT * FROM users

但是 MySQL 卻沒有此功能, 那該怎麼做呢?

TOP n 功能在 MySQL 要改用 LIMIT n, 例如 :

$SQL="SELECT * FROM users WHERE gender='F' ORDER BY age LIMIT 100"

但是 TOP n PERCENT 就稍微麻煩一點, 需要兩個步驟利用 LIMIT n 來模擬, 首先用 SELECT COUNT 求出全部紀錄列數, 再乘以百分比得到筆數, 然後就可以用 LIMIT n 去抓出所需的紀錄 :

$SQL="SELECT COUNT(*) FROM users"; //查詢全部記錄筆數
$RS=run_sql($SQL); //執行 SQL 操作
$percent=20; //列出前百分之 20 紀錄
if (is_array($RS)) {
    $total=$RS[0][0]; //總筆數
    $limit=round($percent*$total/100); //將百分比換算成筆數
    $SQL="SELECT * FROM users LIMIT ".$limit;
    $RS=run_sql($SQL);
    ...
    }
上面的自訂函式 run_sql 會呼叫 PHP 的 mysql_query(), 然後用迴圈以 mysql_fetch_array() 讀取後放入陣列中傳回, 如果是執行 SELECT COUNT 指令, 那麼總記錄筆數會放在 [0][0] 中.

參考資料 :

  1. http://stackoverflow.com/questions/1309137/mysql-limit-by-percentage
  2. http://dba.stackexchange.com/questions/20260/select-top-in-mysql



沒有留言 :