2012-03-26 51 views
0

我有一個超過5000行的表格。每行都有一個類別,我想在我的程序中使用這些行。問題是我每次在課堂內都分析這些行嗎?或者每次只獲取課程需求,並讓每個課程決定使用哪些數據。我知道我的解釋是一團糟,但看看這些例子。在php或MYSQL中分析數據?

PEOPLE 
    -- 
    ID  NAME   CAT  AGE 
    ------------------------------------ 
    1  Brad    5  23 
    2  Goy    3  19 
    2  Romeo   5  34 
    2  Deborah   5  40 
    ..  ..   ..  
    5000 Bob    1  56 

現在我只想要catala = 5的行,並且每行都是一個對象。

First Solution 

    SELECT * FROM people Where CAT = 5 
    and then in php make each class analyze the all data ? 

    foreach($people as $p) 
    { 
     if($p['age'] == 20) 
     do...... 
    } 

Second solution 
    in each class put a function to get the data 

    function get_data 
    { 
     $query = 'SELECT * FROM people WHERE cat = 5 AND age = '.$this->age.''; 
     then do.... 
    } 

我的行數5000這是一個例子,請大家幫幫我,給我的比較有效的解決方案 第一個將再次擊中DATABSE但在同一陣列將循環了很多在每個班級(不好) 第二次將打到數據庫很多次,但會帶來確實需要的數據。

+0

你可以在一個查詢中同時給出兩個條件.. – 2012-03-26 08:52:53

+0

這將是相同的我會擊中數據庫因爲我會擊中每個年齡段的數據庫。你認爲打了20次數據庫還是得到所有的數據並在php中分析了20次? – 2012-03-26 08:55:43

回答

2

由於沒有詳細說明,答案肯定是用SQL查詢過濾數據的原因很多。儘管無法實現db級別的處理(例如涉及更復雜的業務邏輯時),但有些情況下通常應該在數據進入高級代碼之前嘗試過濾數據。

這正是工作數據庫的發明。

在你的榜樣,先收集陣列中的所有您的年齡,然後運行以下查詢:如果你使用MySQL

$sql = 'SELECT * FROM people WHERE cat = 5 AND age IN (' . implode(',', $ages) . ')'; 

,在允許的大小設置是巨大的(32 MB默認)這應該夠了。

+0

非常感謝,這對我很有幫助 – 2012-03-26 09:02:22

0

讓SQL盡你所能地做到儘可能多的工作。特別是關於過濾數據等。

PS:5000行不是那麼多,像DB這樣的DB可以處理每個表100k +行。

0

這取決於你想要做什麼,真的。你想用age == 20做什麼?

在這種情況下的第二個解決方案是一團糟。你會耗盡數據庫真的很沉重。