2012-03-26 52 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做什么?

在这种情况下的第二个解决方案是一团糟。你会耗尽数据库真的很沉重。