我正在为我的网站编写一个基于流畅界面的数据库类。首先,我收集所有有意义的术语,然后将它们放入"堆栈"中,这基本上是一个数组。然后,我对它们进行排序,以便它们出现在实际的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
)
)
我遇到的问题是,有些数组成员我想合并在一起(例如多个->Selects()/->Where()子句),而有些数组成员如果有多个实例,我想完全删除,因为不可能有多个(例如->Limit(),->Order()),但我不完全确定最简单的方法是什么
我在想一些类似于函数的东西,我可以为每个子键调用;
DeleteDuplicates(sql_order);
Merge(sql_select);
不知道如何在每次查询都不会带来巨大性能损失的情况下编写这些。
您的类应该尽早处理重复项。例如,对select()的每次调用都不应向主数组添加另一个项,但对select(()的所有调用都应收集在同一堆栈项中。