2011-01-10 34 views
0

我有一个网页,可以对来自我的MySQL数据库的结果进行分页。下面的代码用于创建下拉菜单以导航结果。目前设置为选择页面n;这假设我在请求第30页时(例如)将相关记录存储在结果集的第30行,但从某些测试中明显看不出这种情况。我应该如何改变它,以便它返回页面?我知道这是需要调整的while语句,但我无法弄清楚。选择第n页而不是页面

//…previous code… 

    $rowsPerPage = 1; 

    // by default we show first page 
    $pageNum = 1; 

    // if $_GET['page'] defined, use it as page number 
    if(isset($_GET['page'])) 
    { 
     $pageNum = $_GET['page']; 
    } 

    $offset = ($pageNum - 1) * $rowsPerPage; 

    $query3 = 'SELECT t1.s_name AS t1_sname, t1.uh_heading AS t1_unit, t1.ut_latin AS t1_latin, t1.ut_english AS t1_english, t1.uh_id, t1.chapter_sequence AS t1_chapters, t1.unit_sequence AS t1_units, 
         t2.s_name AS t2_sname, t2.ut_latin AS t2_latin, t2.ut_english AS t2_english, t2.chapter_sequence AS t2_chapters, t2.unit_sequence AS t2_units 
       FROM vw_source_text_and_translation AS t1 
       LEFT JOIN vw_source_text_and_translation AS t2 
       ON (t2.uh_id = t1.uh_id AND t2.s_id = " ' . $_SESSION['source2'] . ' ") 
       WHERE t1.s_id = " ' . $_SESSION['source1'] . ' " 
       ORDER BY t1.chapter_sequence, t1.unit_sequence' . 
       " LIMIT $offset, $rowsPerPage"; 

//...more code... 

    $query4 = 'SELECT uh_id, chapter_sequence, unit_sequence, uh_heading 
      FROM vw_source_text_and_translation 
      WHERE s_id = "' . $_SESSION['source1'] . '"'; 

//...more code... 

    $rows= $result4; 
    $numrows = 0; 
    $nav = ''; 
    while ($row = mysql_fetch_assoc($rows)) 
    { 
     $nav .= ' <option value="'. $row['uh_id'] .'"> '. 
       $row['chapter_sequence'] .'.'.$row['unit_sequence'] . 
       ' - '. $row['uh_heading'] .'</option>'; 
     $numrows ++; 
    } 

    /*…more code… */ 

好的,所以在一些帮助中这是部分固定的;在同时statment现在读作:

while ($row = mysql_fetch_assoc($rows)) 
{ 
    $numrows ++; 
    $nav .= ' <option value=" ' . $numrows . '"> '. $row['chapter_sequence'] .'.'. 
      $row['unit_sequence'] .' - '. $row['uh_heading'] .'</option>'; 
} 

这修正了分页,但我仍然有未显示的一些记录有问题,即使当我在MySQL工具包与$ _SESSION [设定值运行$ QUERY3” source1']和$ _SESSION ['source2']它工作正常。看起来,如果t2.ut_latin或t2.ut_english存在NULL值,则不会显示任何数据,即使它识别出有已分页的记录。不过,我想这超出了这个问题的主题,所以我可能不得不在这个新问题上重新发布这个问题。

+0

你的查询中是否有`ORDER BY`子句? – 2011-01-10 00:23:13

回答

1

您应该使用带偏移量的LIMIT子句。

SELECT col1, col2, col3 
FROM yourtable 
ORDER BY something 
LIMIT 40, 10 

要计算偏移量,将页码(从0开始)乘以每页的行数。