在php或MYSQL中分析DATA?

时间:2012-03-26 08:45:45

标签: php mysql

我有一个超过5000行的表。每行都有一个类别,我想在我的程序中使用这些行。问题是每次在类内部分析这些行吗?或者每次只获得课程需要,并让每个班级决定使用哪些数据。我知道我的解释很乱,但请看这些例子。

    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

现在我只想用cat = 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这是一个例子,请帮助我并给我更有效的解决方案 第一个会打到数据库一次,但同一个数组将在每个类中循环(不好) 第二个将多次访问数据库,但会带来确实需要的数据。

3 个答案:

答案 0 :(得分:2)

由于没有给出详细信息,答案肯定是使用SQL查询过滤数据,原因有很多。在某些情况下,当无法进行数据库级处理时(例如,当涉及更复杂的业务逻辑时),但通常您应该在进入高级代码之前尝试过滤数据。

这正是职业数据库的发明。

在您的示例中,首先收集数组中的所有年龄,然后运行以下查询:

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

如果您正在使用MySQL,则允许的IN集大小很大(默认为32 Mb),这应该足够了。

答案 1 :(得分:0)

让SQL尽可能多地完成工作。特别是关于过滤数据等。

PS:5000行并不多,像MySQL这样的数据库可以处理每个表100k +行。

答案 2 :(得分:0)

这取决于你想做什么,真的。您想对age == 20做什么?

在这种情况下,第二个解决方案是一团糟。你的数据库真的太累了。