2011-05-12 62 views
1

如果你有以下功能: 如何爲每個表添加LIMIT序列?多表分頁

function find($page=2,$num_of_page=30){ 
    $query_1 = "SELECT COUNT(*) FROM table_1"; 
    $query_2 = "SELECT COUNT(*) FROM table_2"; 
    $query_3 = "SELECT COUNT(*) FROM table_3"; 

    . 
    . 
    . 
    /* 
    $total_count == 100; 
    $table_1_count == 33; 
    $table_2_count == 10; 
    $table_3_count == 57; 
    */ 

    $offset = $page -1 * $num_of_page; 
    $limit = $num_of_page; 
    . 
    . 

} 

if $ page == 2 and $ num_of_page == 30; 你應該執行

SELECT * FROM table_1 LIMIT 30,3 
SELECT * FROM table_2 LIMIT 0,10 
SELECT * FROM table_3 LIMIT 0,17 

請原諒我的醜的英語

回答

1

如果這些表都具有相同的結構,你可以做SELECT * FROM table1 UNION ALL SELECT * FROM table2 UNION ALL SELECT * FROM table3,然後使用該查詢單LIMIT

+1

這裏有幾百萬行和工會的我的表將需要更多的時間來獲取數據 有沒有什麼辦法,這將首先提取第一表,如果需要的記錄集中找到然後跳過其餘 如果發現了一些記錄,但不是總的經費,那麼它應該尋找第二張表來填補記錄,並繼續相同 –

+0

我還沒有看過這種情況下的查詢計劃。如果你描述的不是已經發生的事情,你應該先嚐試'UNION ALL',因爲這樣可以避免檢查重複。如果仍然不起作用,您可能需要分別查詢每個表。 –