MySQL Query Help:从关联表中获取位置的内容

时间:2012-03-06 20:16:38

标签: php mysql arrays associative

我需要做什么

  • 我有两个表,“章节”和“页面”。
  • 每章都有很多页面。
  • 章节按位置列排序。
  • 页面按位置列相对于其章节排序。所以每章的第一页都有一个位置。
  • 我需要前后3页(如果当前页面之前/之后有3页。即 - 第2页,当前页面前只有1页)
  • 我只有当前章节的'名字'和当前页面的'名称'属性。
  • 我正在使用PHP和MySQL

“章节”表

  • ID
  • 名称
  • 位置

“pages”表

  • ID
  • chapter_id
  • 名称
  • 位置

如何构建一个返回页面关联数组的查询,以便我有如下内容(注意:如果需要,我可以使用php进行一系列查询):

  • 页面[0] [ “ID”]
  • 页面[0] [ “名称”]
  • 页面[0] [ “chapter_name”]

谢谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您可以更改表格,为什么不在页面表中添加排序列?

而不是使用int并且每次插入新页面时都必须移动所有内容 也可以使用double,只使用此页和下一页之间的中间值。

答案 2 :(得分: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");

现在,只需获取该查询并确保忽略该数组中的当前页面。