2016-08-03 95 views
-1

我有一個數據庫有多個表(大約100),記錄基於類別存儲。每個類別都是一個表格,每個表格都包含多個項目。每個項目每天都有多個交易記錄,無論何時發生每行有多個字段的交易。For循環中的MySQL順序讀取

我需要根據條件爲每個項目獲取記錄,並在應用程序(PHP或Python程序)中執行一些操作(例如:某種類型的聚合)。結果再次存儲在另一個數據庫表中。

目前我正在爲每個項目手動運行操作。通過傳遞項目作爲參數來執行每個項目的程序。但是我對每天都在獲得新類別和新項目的情況都非常反感,這讓我很難調整手動執行。

下面是我試圖自動化的方法,但都沒有工作。

  1. 運行MySQL查詢在for循環中的每個項目,但執行不工作或執行上只有一個項目。 這是我用於爲每個項目提取數據的控制器,但這不會請求所有項目。它只能用於第一件商品或最後一件商品。 此外,我不能讓循環等待,直到數據庫拉動完成。

for($i=0;$i<$total_items;$i++) { $data['results'] = $this->scripts_model-> run_daily_stats($item, $Parameter1, $Paramet2); //Use the Results in some operations, and then proceed with next result set. }

  • 創建爲每個項目平面文件並拉出的記錄。這已經成爲現存的一些工作,但基於條件從平面文件中提取記錄似乎也同樣困難。並重新創建每個文件不起作用。
  • 將所有項目放入批處理作業中,每30秒添加一行執行一次,但需要很長時間才能完成所有項目,並且我需要每天更新批處理文件。
  • 這是我使用的示例批處理文件。這有320行現在運行約2小時。我每天添加多行。所以預計這會增加總執行時間。

    15 12 * * * wget 127.0.0.1/~home/scripts/update_daily/item1 >/dev/null 2>&1 
    15 12 * * * sleep 30; wget 127.0.0.1/~home/scripts/update_daily/item2 >/dev/null 2>&1 
    16 12 * * * wget 127.0.0.1/~home/scripts/update_daily/item3 >/dev/null 2>&1 
    16 12 * * * sleep 30; wget 127.0.0.1/~home/scripts/update_daily/item4 >/dev/null 2>&1 
    
    . 
    . 
    55 12 * * * wget 127.0.0.1/~home/scripts/update_daily/item234 >/dev/null 2>&1 
    . 
    . 
    . 
    
    4. Group multiple Items and put in a batch file, but the unable to run the program for each item. 
    

    有沒有一種方法可以在不破壞MySQL連接的情況下自動執行?請提出任何有助於我解決問題的技術或程序。

    感謝

    拉維

    +0

    請向我們介紹一下您試過的東西! –

    回答

    0

    即使考慮這個問題之前,我想請您務必數據庫的重新審視結構。如果您有100個具有相同結構(?)的表,每個表代表一個不同的類別,那麼使用一個附加的category列可以用來查詢相關行,這將更加簡單。

    由於您沒有顯示您描述的代碼,所以任何人都難以說出您可能做錯了什麼,因爲我們所知道的是,您嘗試過的東西「不起作用」。

    +0

    謝謝holdenweb。我同意,將所有行放在一個表中,但我也使用逐項讀取表來提高讀取性能。從一張擁有100萬條記錄的表中拉出少量記錄(每次讀取大約200條記錄)效率不高。 –

    +0

    你的無經驗似乎是在錯誤地指導你。在正確設計的數據庫中讀取性能顯然會更好。除非你有證據證明,否則你錯在試圖優化一些你不知道導致問題的東西。 – holdenweb

    +0

    可能你是對的。但是對於單個表上的多個項目的多次讀取和多次寫入對我來說似乎是一個糟糕的主意。所以繼續創建多個表。如果沒有其他解決方案可用,我將嘗試爲我的聚合操作創建一個大表,並且所有讀取將在單獨的表上。 –