因此,正如标题所暗示的,我正在尝试从多个表中检索记录。我有以下表格:ads1、ads2、ads3、....每个表包含一个或多个记录,在名为names的列下具有auto_increment id和人名。
假设我在每个表中有10条记录,并且我有一个分页脚本,它每页显示5条记录,这意味着每个表有2页,因此我将有1、2、3、4、5、6页。我的算法没有正确地做到这一点,在我的第一个页面上,它显示了第一个表中的5条记录,第二个表中的5条记录,第三个表中的5条记录,依此类推。但是我希望每页只显示5条记录,而不是我拥有的每个表中的5条记录,我希望它们正确地显示在来自ads1的页面1和2记录上,在来自ads2的页面3和4记录上等等,希望你能理解。你能帮帮我吗?
下面是我的算法:
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:对于只有一个表,算法完全正常工作,但当我有两个或更多的表时,它就停止正常工作。
发布于 2012-09-14 23:09:05
这里有一种方法:
$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-14 22:37:34
您只需执行一个查询,该查询将是所有所需表的结果的UNION。如果在每个表中单独执行SELECT,则无法准确跟踪总结果。
https://stackoverflow.com/questions/12426568
复制相似问题