2012-03-26 12 views
0

私は5000行以上のテーブルを持っています。各行にはカテゴリがあり、プログラムでこれらの行を使用したいと考えています。問題は、クラス内で毎回これらの行を分析することですか?または、毎回必要なクラスだけを取得し、各クラスでどのデータを使用するかを決定します。私の説明は混乱ですが、これらの例を見てください。phpまたはMYSQLのDATAを分析していますか?

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.... 
    } 

私はそれが一例だROWS 5000の多くを持って、私を助け、私の最初のものは一度databseを打つだろう よりefficentソリューションが、同じ配列がループを与えてください各クラスで(悪い) 2回目はデータベースに何度もヒットしますが、実際に必要なデータが表示されます。

+0

あなたは単一のクエリで両方の条件を与えることができます.. –

+0

それは私が各年齢のデータベースをヒットするデータベースをヒットする同じになります。あなたはデータベースを20回押すか、すべてのデータを取得し、それをPHPで20回分析すると思いますか? –

答えて

2

詳細は何も記載されていませんが、答えは多くの理由でSQLクエリでデータをフィルタリングすることです。 DBレベルの処理が不可能な場合(たとえば、より複雑なビジネスロジックが含まれている場合など)には、いくつかの状況がありますが、通常、上位レベルのコードに入る前にデータをフィルタリングしようとする必要があります。

それは正確にデータベースが発明されたジョブです。その後、あなたの例では

、最初の配列内のすべてのあなたの年齢を収集し、次のクエリを実行します。

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

MySQLを使用している場合は、INの許容サイズが設定されますが、デフォルトでは、巨大な(32 MBです)十分でなければならない。

+0

ありがとう、それは私のためにとても役立った –

0

SQLは簡単にできるように多くの作業をします。特にフィルタリングデータなどに関しては、

PS:5000行ほどではありません.SQLなどのDBは、1テーブルあたり100k +行を処理するように作られています。

0

本当にやりたいことに依存します。 age == 20で何をしたいですか?

この場合第2のソルトトンは混乱している。あなたは本当に重いデータベースを使い果たしているでしょう。

関連する問題