2

私のデータベースには "category" と "article" の 2 つのテーブルがあります。

Category

id | Category
---------------------
 1   Mobiles
 2   Computers
--------------------
Article


id | Category    | title   |article   
-------------------------------------
 1   2      title      article desc   
 2   1     title      article desc
 3   1     title      article desc
 4   1     title      article desc
 5   2     title      article desc


--------------------------------------

記事ページ用に生成された URL はこの形式です。

URL/ID/TITLE

現在の記事ページに次の記事と前の記事のタイトルを表示したいと思います。

そのため、以下のコードを使用して、リンク付きの次および前のタイトルを表示しました。

前の記事

$getid = $_GET['id'];
$previous = $getid - 1;
$previousdata = $db->getRow("select * from article WHERE news_id='$previous'");

次の記事

$getid = $_GET['id'];
$next = $getid + 1;
$nextdata = $db->getRow("select * from article WHERE news_id='$next'");

そして、次のようなphpコード

<a href="http://www.domain.com/article-<?php echo ($previousdata['news_id']); ?>/<?php  echo friendlyURL($previousdata['title']); ?>"> <?php echo  friendlyURL($previousdata['title']); ?></a>

これは正常に動作します。ID を使用して、次のリンクと前のリンクにモバイルとコンピューターの投稿が表示されます。

たとえば、モバイル カテゴリに 2 つの記事を投稿した場合、生成された ID は 12 と 13 でした。次に、コンピューター カテゴリに記事を投稿した場合、生成された ID は 14 でした。ユーザーが ID 13 のモバイル記事を読むと、下部に前の記事が表示されます。 ID 12 のタイトルと ID 14 の次の記事のタイトル。当然、前の記事はモバイル、次はコンピューターのカテゴリです。

しかし、「モバイル」カテゴリのみで次と前のページネーションのみを表示したいのですが、

だから私はカテゴリを割り当てようとします

 $getid = $_GET['id'];
 $next = $getid + 1;
 $nextdata = $db->getRow("select * from article WHERE Category=1 AND id='$next'");

これはモバイルのみをフィルタリングしません..

4

2 に答える 2

1

以下のようにクエリから直接取得できます

$getid = $_GET['id'];
$nextdata = $db->getRow("select * from article WHERE Category=1 AND news_id > ".$getid." order by news_id ASC LIMIT 0,1");

$previousdata = $db->getRow("select * from article WHERE Category=1 AND news_id < ".$getid." order by news_id DESC LIMIT 0,1");
于 2012-10-07T10:46:04.330 に答える
1

同じカテゴリの次/前の記事 ID を取得したい場合:

次の記事:

$nextdata = $db->getRow("
    select * 
    from article 
    where Category = 1 and id > $current_article_id
    order by id
    limit 1
");

前の記事:

$previousdata = $db->getRow("
    select * 
    from article 
    where Category = 1 and id < $current_article_id
    order by id desc
    limit 1
");
于 2012-10-07T10:47:20.023 に答える