この記事の例では、前の記事と次の記事をPHPで実装する方法を分析しています。参考までに皆さんにも共有してください。詳細は以下の通りです:
php は前の記事と次の記事を実装しています。これは主に SQL を使用して現在の ID に基づいて判断し、現在の ID またはデータの前のデータを除外します。 ID の後は非常に簡単なので、詳細を見てみましょう。
Web記事の前後記事のSQL文の書き方を実装します。
現在の記事の ID は $article_id で、現在の記事の対応するカテゴリの ID は $cat_id です。すると、前の記事は次のようになります。
SELECT max(article_id) FROM article WHERE article_id < $article_id AND cat_id=$cat_id;
この SQL ステートメントを実行すると、$max_id が取得されます。
SELECT article_id, title FROM article WHERE article_id = $max_id;
それを単純化して変換します。 サブクエリは次のとおりです:
SELECT article_id, title FROM article WHERE article_id = (SELECT max(article_id) FROM article WHERE article_id < $article_id AND cat_id=$cat_id);
次の記事です。コードは次のとおりです:
SELECT min(article_id) FROM article WHERE article_id > $article_id AND cat_id=$cat_id;
この SQL ステートメントを実行した後、$min_id を取得し、次に:
SELECT article_id, title FROM article WHERE article_id = $min_id;
を単純化して、それをサブクエリに変換します:
SELECT article_id, title FROM article WHERE article_id = (SELECT min(article_id) FROM article WHERE article_id > $article_id AND cat_id=$cat_id);
最後に、次のステートメントを使用するのを好む友人がたくさんいます
前の記事では、コードは次のとおりです:
select id from table where id10 limit 0,1;
これで間違いなく問題はありません。しかし、パフォーマンスはあまり良くありません。
SQL ステートメントの最適化:
これを実現するには、union all を使用できます。1 つのステートメントで 3 行のデータをフェッチしますが、前提条件として、3 つのクエリのフィールドが同じである必要があります。このクエリの結果の行は前の記事、2 行目は現在の記事、3 行目は次の記事です:
(select id from table where id < 10 order by id asc limit 1) union all (select id from table where id = 10) union all (select id from table where id > 10 order by id desc limit 1);
それでは、cms での phpcms 実装の例をいくつか見てみましょう。前の記事次の記事.
現在閲覧中の記事idを取得:
$id = isset($_GET['id']) > 0 ? intval($_GET['id']) : "";
次の記事:
$query = mysql_query("SELECT id,title FROM article WHERE id>'$id' ORDER BY id ASC LIMIT 1"); $next = mysql_fetch_array($query);
前の記事:
$query = mysql_query("SELECT id,title FROM article WHERE id <'$id' ORDER BY id DESC LIMIT 1"); $prev = mysql_fetch_array($query);
この記事がPHPプログラミングの皆さんのお役に立てれば幸いです。
前回と次回の記事の PHP 実装方法と例については、関連記事の PHP 中国語 Web サイトに注目してください。