n行目からm行の取得

ページ番号の取得はできるようになりましたが、データはどうやって取得するのでしょう?
Oracleの場合、ROWNUM疑似列を使って取得することができます。

SELECT * 
    FROM (SELECT ROWNUM AS ROWIDX,TOPIC_ID FROM topic)
    WHERE ROWIDX BETWEEN n AND m;

(余談ですがROWNUMはFETCHするごとに1をふっていきます。単純にBETWEEN ROWNUM n AND mでは取得できません。)

MySQLの場合はどうでしょう?

SELECT * FROM topic ORDER BY topic_id LIMIT オフセット,行数;

MySQLの場合、LIMITとという構文が用意されてます。
0から始まって何行目から何行取得するかという指示です。
ORDER BY句は特に関係は無いのですが取得順を一定にするように指定しておきます。

それでは、トピックのページに使用してみます。

$sql = "SELECT t.topic_id,m.post_id,m.post_subject,t.reply_count,m.post_user,t.last_post_date "
     . "FROM topic t,post_message m WHERE t.forum_id = " . $_GET['fid'] 
     . " AND t.topic_id = m.topic_id AND m.parent_post_id = 0 "
     . "ORDER BY t.topic_id DESC LIMIT " . (($page * 表示する行数) - 表示する行数) . ",表示する行数";

$pageの現在のページから表示する開始行を決定します。
SQL文ができれば後は表示するだけです。

今回は、phpというよりもSQL文の話でした。

まとめ

n行目からm行抜くには、 LIMIT を使用する。