- 選取資料表的前 100 筆紀錄 : SELECT TOP 100 * FROM users
- 選取資料表的前 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] 中.
參考資料 :
- http://stackoverflow.com/questions/1309137/mysql-limit-by-percentage
- http://dba.stackexchange.com/questions/20260/select-top-in-mysql
沒有留言 :
張貼留言