1

私は何をする必要がありますか

  • 「章」と「ページ」の2つのテーブルがあります。
  • 各章には多くのページがあります。
  • チャプターは位置列でソートされます。
  • ページは、その章に関連する位置列によって並べ替えられます。したがって、各章の最初のページの位置は 1 です。
  • 前後に 3 ページを取得する必要があります (現在のページの前後に 3 ページある場合。つまり、2 ページ目では現在のページの前に 1 ページしかありません)。
  • 現在の章の「名前」と現在のページの「名前」属性しかありません。
  • PHPとMySQLを使用しています

「チャプター」テーブル

  • ID
  • 名前
  • 位置

「ページ」テーブル

  • ID
  • chapter_id
  • 名前
  • 位置

ページの連想配列を返すクエリを作成するにはどうすればよいですか (注: 必要に応じて、一連のクエリを実行するために php を使用できます)。

  • ページ[0]["ID"]
  • ページ[0][「名前」]
  • ページ[0]["chapter_name"]

ありがとう!

4

3 に答える 3

0

テーブルを変更できる場合は、ページ テーブルに順序付け列を追加してみませんか?

intを使用して新しいページを挿入するたびにすべてを移動する代わりに、 adoubleを使用して、このページと次のページの中間の値を使用することもできます。

于 2012-03-06T20:54:10.140 に答える
0
$cChapter = 5; //Current chapter's id
$cPage = 4; //Current page's id

//$PagePos = the current's page position (when 1 is the first page , not 0)
//$MaxPosExists = the highest position value for the current chapter
$range = 3; //3 pages before and 3 pages after

$minPosition = $PagePos - $range;
$maxPosition = $PagePos + $range;

if($minPosition <= 0)
{
 $minPosition = 1; //the current page is the first,second or third page.
}

if($maxPosition > $MaxPosExists)
{
 $maxPosition = $MaxPosExists;
}


$getPages = mysql_query("SELECT * FROM pages WHERE chapter_id='$cChapter' AND position BETWEEN $minPosition AND $maxPosition ORDER BY position ASC");

今、そのクエリをフェッチして、その配列から現​​在のページを無視していることを確認してください。

于 2012-03-06T20:55:19.313 に答える
0

私はあなたがそのようなクエリを探していると思います:

SELECT
    pages.id AS page_id,
    pages.name AS page_name,
    chapters.name AS page_chapter
FROM pages
INNER JOIN chapters ON (chapters.id = pages.chapter_id)
WHERE pages_id IN
    (page_id -3, page_id - 2, page_id - 1, page_id,
    page_id + 1, page_id + 2, page_id + 3)
ORDER BY page_id ASC
于 2012-03-06T20:53:22.030 に答える