2012-02-20 107 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 
     ) 

) 

的问题我有一些数组成员我想合并在一起(例如多个 - >选择()/ - > Where()子句)和一些数组成员我想完全删除如果有多个实例,因为它不可能因为那里有多个(例如 - > Limit(), - > Order()),但是我不完全确定最简单的方法是什么。

我在想一个函数的行,我可以调用每个子键;

DeleteDuplicates(sql_order); 
Merge(sql_select); 

不知道如何写这些没有大量的性能击中每个查询。

+0

我总是可以使用foreach()循环,但考虑到我将运行查询的频率,我不希望在每个查询中多次运行循环中遇到巨大的性能。可能有更好的方法? – kvanberendonck 2012-02-20 07:24:30

回答

0

你的班级应尽早处理重复。例如,每次调用select()都不应该向主数组中添加其他项,但所有对select()的调用都应该被收集在同一个堆栈项中。

相关问题