2012-02-20 25 views
0

私は流暢なインターフェイスに基づいて私のサイトのデータベースクラスを作成しています。まず、すべての意味のある用語を集め、基本的に配列である「スタック」に入れます。次に、実際のSQLクエリに表示されるように並べ替えます。例えば同じサブキーの配列のマージ/削除

const stmt_select = 1; 
const stmt_insert = 2; 
const stmt_delete = 3; 

const sql_select = 10; 
const sql_from = 11; 
const sql_into = 12; 
const sql_where = 13; 
const sql_join = 14; 
const sql_group = 15; 
const sql_order = 16; 
const sql_limit = 17; 

、以下のクエリ(総ごみ順であるが、と意図クラスをオフにスローしようとしている):

Query::Select('name', 'age', 'height') 
    ->Order('a') 
    ->From('table') 
    ->From('asd') 
    ->Group('a') 
    ->Execute(); 

..は生成:

Array 
(
    [0] => Array 
     (
      [0] => 10 
      [1] => Array 
       (
        [0] => name 
        [1] => age 
        [2] => height 
       ) 

     ) 

    [1] => Array 
     (
      [0] => 11 
      [1] => asd 
     ) 

    [2] => Array 
     (
      [0] => 11 
      [1] => table 
     ) 

    [3] => Array 
     (
      [0] => 15 
      [1] => a 
     ) 

    [4] => Array 
     (
      [0] => 15 
      [1] => a 
     ) 

) 

私が持っている問題は、複数のインスタンスが存在する場合には、複数のインスタンスがある場合に、それらを一緒にマージしようとする配列メンバ(例えばmultiple - > Selects()/ - > Where()節)と、 (> - > Limit()、 - > Order()など)が複数存在するようになっていますが、これを行う最も簡単な方法は何か分かりません。

私は各サブキーを呼び出すことができる関数の行に沿って何かを考えていました。

DeleteDuplicates(sql_order); 
Merge(sql_select); 

クエリごとに大量のパフォーマンスヒットなしでこれらを書き込む方法がわかりません。

+0

私はいつもforeach()ループを使うことができますが、クエリを実行する頻度を考慮すると、1回のクエリで複数のループを実行することで大きなパフォーマンスが得られないようにしたいと考えています。おそらくもっと良い方法がありますか? – kvanberendonck

答えて

0

クラスはできるだけ早く重複を処理する必要があります。たとえば、select()を呼び出すたびに、メイン配列に別の項目を追加すべきではありませんが、select()へのすべての呼び出しは、同じスタック項目に収集する必要があります。

関連する問題