2012-02-20 4 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() 절) 및 possib 않기 때문에 여러 인스턴스가있는 경우 완전히 삭제하려는 일부 배열 구성원입니다 (예를 들어 -> Limit(), -> Order())이 하나 이상있는 경우, 가장 쉬운 방법은 무엇인지 모르겠습니다.

각 하위 키를 호출 할 수있는 함수의 줄을 따라 생각하고있었습니다.

DeleteDuplicates(sql_order); 
Merge(sql_select); 

쿼리 당 엄청난 성능 저하없이 어떻게 작성해야할지 모르겠습니다.

+0

항상 foreach() 루프를 사용할 수는 있지만 쿼리를 실행할 빈도를 고려할 때 쿼리 당 여러 번 루프를 실행하면 엄청난 성능 저하를 피하기를 원합니다. 아마 더 좋은 방법이 있을까요? – kvanberendonck

답변

0

클래스는 가능한 한 빨리 중복을 처리해야합니다. 예를 들어 select()를 호출 할 때마다 주 항목에 다른 항목을 추가해서는 안되지만 select()에 대한 모든 호출은 같은 스택 항목에 수집해야합니다.

관련 문제