0

タイトルが示すように、複数のテーブルからレコードを取得しようとしています。次のテーブルがあります: ads1、、、 .... 各テーブルにはads2ads3auto_incrementidを持つ 1 つ以上のレコードと、という名前の列の下に人の名前が含まれていますnames

各テーブルに 10 件のレコードがあり、ページごとに 5 件のレコードを表示するページネーション スクリプトが1ある2とします。私のアルゴリズムはそれを正しく行いません。最初のページでは、最初のテーブルから 5 つのレコード、2 番目のテーブルから 5 つのレコード、3 番目のテーブルから 5 つのレコードなどを表示します...しかし、5 つのレコードのみを表示したいper page 、私が持っている各テーブルの 5 ではなく、 のページとレコード、のページとレコードなどに正しく表示されるようにしたいので、ご理解いただければ幸いです。手伝ってくれませんか ?345612ads134ads2

ここに私のアルゴリズムがあります:

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: テーブルが 1 つだけの場合、アルゴリズムは正常に機能しますが、テーブルが 2 つ以上ある場合、正しく機能しなくなります。

4

2 に答える 2

2

これを行う1つの方法は次のとおりです。

$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

実行する必要があるクエリは1つだけです。これは、UNION必要なすべてのテーブルの結果の1つになります。各テーブルでsを個別に実行するSELECTと、合計結果を正確に追跡できなくなります。

于 2012-09-14T14:37:34.473 に答える