Объединять / удалять массивы с одинаковыми подключами - PullRequest
0 голосов
/ 20 февраля 2012

Я пишу класс базы данных для моего сайта на основе свободного интерфейса.Сначала я собираю все значимые термины, а затем помещаю их в «стек», который в основном представляет собой массив.Затем я сортирую их по порядку, чтобы они отображались в реальном запросе 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 () / -> Где () и некоторые элементы массива, которые я хочу полностью удалить, если существует несколько экземпляров, поскольку их не может быть больше одного (например, -> Limit (), -> Order ()), однако яне совсем уверен, что это самый простой способ сделать это.

Я думал что-то вроде функции, которую я мог бы вызывать для каждого подраздела;

DeleteDuplicates(sql_order);
Merge(sql_select);

Не уверен, как написать этибез значительного снижения производительности за запрос.

1 Ответ

0 голосов
/ 28 февраля 2012

Ваш класс должен обрабатывать дубликаты как можно раньше.Например, каждый вызов select () не должен добавлять другой элемент в основной массив, но все вызовы select () должны собираться в одном и том же элементе стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...