sql >> データベース >  >> RDS >> Mysql

SQLクエリから複数のページを作成する

    ほとんどのページネーションの例は、実際の要件を満たしていません。たとえば、カスタムクエリ文字列。
    つまり、完全でありながら簡潔な例を次に示します。

    <?
    per_page=10;
    // Let's put FROM and WHERE parts of the query into variable
    $from_where="FROM Post WHERE active ='1'";
    // and get total number of records
    $sql = "SELECT count(*) ".$from_where;
    $res = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
    $row = mysql_fetch_row($res);
    $total_rows = $row[0];
    
    //let's get page number from the query string 
    if (isset($_GET['page'])) $CUR_PAGE = intval($_GET['page']); else $CUR_PAGE=1;
    //and calculate $start variable for the LIMIT clause
    $start = abs(($CUR_PAGE-1)*$per_page);
    
    //Let's query database for the actual data
    $sql = "SELECT * $from_where ORDER BY PostID DESC LIMIT $start,$per_page";
    $res = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
    // and fill an array
    while ($row=mysql_fetch_array($res)) $DATA[++$start]=$row;
    
    //now let's form new query string without page variable
    $uri = strtok($_SERVER['REQUEST_URI'],"?")."?";    
    $tmpget = $_GET;
    unset($tmpget['page']);
    if ($tmpget) {
      $uri .= http_build_query($tmpget)."&";
    }    
    //now we're getting total pages number and fill an array of links
    $num_pages=ceil($total_rows/$per_page);
    for($i=1;$i<=$num_pages;$i++) $PAGES[$i]=$uri.'page='.$i;
    
    //and, finally, starting output in the template.
    ?>
    Found rows: <b><?=$total_rows?></b><br><br>
    <? foreach ($DATA as $i => $row): ?>
    <?=$i?>. <a href="?id=<?=$row['id']?>"><?=$row['title']?></a><br>
    <? endforeach ?> 
    
    <br>
    Pages: 
    <? foreach ($PAGES as $i => $link): ?>
    <? if ($i == $CUR_PAGE): ?>
    <b><?=$i?></b>
    <? else: ?> 
    <a href="<?=$link?>"><?=$i?></a>
    <? endif ?> 
    <? endforeach ?> 
    


    1. phpとmysqlを使用したログイン/登録システム

    2. MySQLクロスサーバー選択クエリ

    3. 認証プラグイン'caching_sha2_password'を読み込めません

    4. 行の挿入時に最後のID(IDENTITY)を返すVB.NET MySQL