2012-09-14 182 views
0

所以就像標題所暗示的那樣,我試圖從多個表中檢索記錄。 我有以下表格:ads1,ads2,ads3,....每個表格包含1個或多個記錄,其中auto_increment爲id,名字爲names從多個表中檢索記錄

比方說,我有10個記錄的每個表中,我有一個分頁腳本,顯示5條每頁,這意味着2頁每個表,所以我會12345頁, 6。 我的算法沒有正確執行,在我的第一頁上,它顯示了來自第一個表的5條記錄,來自第二個表的5條記錄,來自第三個表的5條記錄,等等......但我只想要5條記錄每頁顯示不是5,我希望它們能正確顯示在頁面12記錄ads1,34記錄ads2等,希望你能明白。 你能幫我嗎?

這裏是我的算法FFT:

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個或多個錶停止正常工作。

+0

發表了一個建議重寫,但我看到你已經得到它的工作。只有一個建議:您正在使用的原始mysql API已被棄用。建議您使用「MySQL改進的擴展」:http://www.php.net/manual/en/book.mysqli.php。如果您覺得將來可能會更改數據庫,則還可以使用PDO:http://www.php.net/manual/en/book.pdo.php。祝你的項目好運。 – David

回答

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. 
} 

希望這有助於。

+0

的確是一個很好的答案:) :) :) – southpaw93

1

您必須只執行一個查詢,這將是所有所需表結果的UNION。如果您在每個表格中分別執行SELECT s,則無法以準確的方式跟蹤總體結果。

+0

我看到了,但是如何執行和UNION多個表,請記住表是動態創建的,所以我不知道我在db中創建了多少表,只能通過運行一個函數來獲取數表格。 – southpaw93

+0

非常感謝你,我看着它,它的工作:) – southpaw93