0

所以就像标题所暗示的那样,我正在尝试从多个表中检索记录。我有以下表格:ads1, ads2, ads3,.... 每个表格包含 1 条或多条带有 auto_increment的记录id和名为 的列下的人名names

假设我在每个表中有 10 条记录,并且我有一个分页脚本,每页显示 5 条记录,这意味着每个表有 2 页,所以我将有 pages 1, 2, 3, 4, 5, 6。我的算法没有正确执行,在我的第一页上显示第一个表中的 5 条记录,第二个表中的 5 条记录,第三个表中的 5 条记录,依此类推...但我只希望显示 5 条记录每页,而不是我拥有的每个表中的 5 个,我希望它们能够正确显示在来自 的页面12记录、来自ads1的页面34记录ads2等上,希望你能明白。你能帮我么 ?

这是我的算法:

for ($i=1;$i<=$kay;$i++)
{
    $counter = 0;
    $tablenow = 'ads'.$i;
    $result = mysql_query("SELECT id FROM ".$tablenow." ");

    $counter = $counter + mysql_num_rows($result);
    $x=ceil($counter / $per_page);
    $page = (isset ($_GET['page']) AND (int)$_GET['page'] > 0 AND (int)$_GET['page'] <= $x) ? (int)$_GET['page'] : 1;
    $start = ($page - 1) * $per_page;
    $sql = mysql_query("SELECT * FROM ".$tablenow." ORDER BY id DESC  LIMIT 
    $start,$per_page ")or die(mysql_error());
    while ($sqlg=mysql_fetch_assoc($sql))
    {
        // this is where I show the records.
    }
}

PS:对于只有一个表,该算法完全可以正常工作,但是当我有 2 个或更多表时,它会停止正常工作。

4

2 回答 2

2

这是一种方法:

$count_tables = 10;
$query        = '';
for ($table_no = 1; $table_no <= $count_tables; $table_no++ ) {
  $query .= "SELECT * FROM ads" . $table_no . " UNION ";
}
// Remove trailing UNION
$query = preg_replace( '/ UNION \Z/', '', $query );

$result     = mysql_query("SELECT id FROM ".$tablenow." ");
$total_rows = mysql_num_rows($result);
$max_page   = ceil( $total_rows / $per_page );

// Fetch rows for the page
$query_for_page .= $query . " ORDER BY id DESC LIMIT $start, $per_page";
$page = ( isset ($_GET['page'])
          AND (int)$_GET['page'] > 0
          AND (int)$_GET['page'] <= $max_page ) ? (int)$_GET['page'] : 1;
$start = ($page - 1) * $per_page;

$page_results = mysql_query( $query_for_page ) or die( mysql_error() );
while ( $row = mysql_fetch_assoc( $page_results ) ) {
  // this is where I show the records.
}

希望这可以帮助。

于 2012-09-14T15:09:04.710 回答
1

您只需执行一个查询,这将是UNION所有所需表的结果之一。如果您SELECT在每个表中单独执行 s,则无法准确跟踪总结果。

于 2012-09-14T14:37:34.473 回答