Как я добавляю комплекс где пункт к Выбору Таблицы Зенда?

Я искал в Интернете и не мог найти ничего, что покажет мне хороший твердый пример. Мой вопрос - в основном это:

Как делают я преобразовываю это:

ВЫБЕРИТЕ * таблица FROM ГДЕ ((= 1 И b = 2) ИЛИ (c = 3 ИЛИ c = 4)) И d = 5;

К синтаксису Зенда, подобному этому:

$this-> выбор ()-> от ($this-> _ схема. '. $this-'.> _ имя)->, где ('=?', '1');

Таким образом, как это может быть сделано?

Благодарите много заранее.

11
задан AD. 14 April 2010 в 18:44
поделиться

3 ответа

У меня была аналогичная проблема. См. Пример кода в ответе здесь: Группировка предложений WHERE с помощью Zend_Db_Table_Abstract

Таким образом, вы получите что-то вроде:

$db = $this->getAdapter();
$this->select()
     ->where('(' . $db->quoteInto('a = ?', 1) . ' AND ' . $db->quoteInto('b = ?', 2) . ') OR (' . $db->quoteInto('c = ?', 3) . ' OR ' . $db->quoteInto('c = ?', 4) . ')')
     ->where('d = ?', 5);

Что даст вам:

SELECT `table_name`.* FROM `table_name` WHERE ((a = 1 AND b = 2) OR (c = 3 OR c = 4)) AND (d = 5)
14
ответ дан 3 December 2019 в 07:11
поделиться

Согласно сообщению доски сообщений на веб-сайте Zend Framework, это может быть невозможно.

Мне кажется, что where () и orWhere () в классе Zend_Db_Select недостаточно для записи всех запросов. Он не поддерживает вложение условий, которое не требует от пользователя абстракции в несколько более сложных случаях. С помощью where () и orWhere () я не могу написать это:

1
ответ дан 3 December 2019 в 07:11
поделиться

Edit

Функции массива Zend_Db_Select->, где предназначен только для использования с IN ] пункт.

Example #17 Example of an array parameter in the where() method
// Build this query:
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (product_id IN (1, 2, 3))

$productIds = array(1, 2, 3);

$select = $db->select()
             ->from('products',
                    array('product_id', 'product_name', 'price'))
             ->where('product_id IN (?)', $productIds);

Оригинал

Как сказал Педер, вы не можете вложить илиWhere , но вы можете передать несколько аргументов в , где и orWhere .

$this->select()
  ->from($this->_schema.'.'.$this->_name)
  ->where(' ( a = ? AND b = ? ) OR ( c = ? OR c = ? ) ', array(1,2,3,4))
  ->where('d = ?',array(5));

0
ответ дан 3 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: