sql — закрытие в закрытии — есть ли лучший способ?

Я использую массив пар ключ-значение (со значениями, возможно, массивами), чтобы создать оператор WHERE для запроса SQL.

Пары ключ-значение превращаются в `key` = ‘value’ с положением AND между ними, но если значение является массивом, оно, в свою очередь, включается в условия OR.

private function constructWhereStatement() {

if (!isset($this->where) || !is_array($this->where)) {
return 'WHERE 1';
}

array_walk($this->where, function(&$value, $key) {

if (is_array($value)) {

array_walk($value, function (&$v, $k, $key){
$v = "`$key` = '$v'";
}, $key);

$value = "(" . implode(' OR ', $value) . ")";
} else {
$value = "`$key` = '$value'";
}
});
return "WHERE " . implode(' AND ', $this->where);
}

Так, ['side' => 'left', 'type' => ['page', 'dropdown']] вернусь:

WHERE `side` = 'left' AND (`type` = 'page OR `type` = 'dropdown')

Есть лучший способ сделать это? С рекурсией, возможно?

2

Решение

возможно использовать IN ()

WHERE `side` = 'left' AND type IN('type','dropdown')
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector