Zend_Db_Select EXISTS - PullRequest
       15

Zend_Db_Select EXISTS

1 голос
/ 16 ноября 2011

Одна часть моего запроса - условие EXISTS:

$select->where(
  'EXISTS(' .
  'SELECT `price_property_id` FROM `property_price` ' .
    'WHERE `price_property_id` = `pu_property_id`' .
      ' AND `price_value` >= ' . $params['price_min'] .
      ' AND `price_value` <= ' . $params['price_max'] .
   ')'
);

Как правильно пишет в Zend Framework?

Ответы [ 3 ]

2 голосов
/ 10 сентября 2015

Я создаю свои подзапросы и выбираю их как новые объекты Zend_Db_Select.Это делает код немного чище, поскольку я потенциально могу повторно использовать этот запрос в другом месте, это также помогает при отладке, поскольку я могу echo (string)$subQuery просматривать только эту часть SQL.

$subQuery = new Zend_Db_Select();
$subQuery->from(array('price' => 'property_price'))
     ->where('price_property_id = pu_property_id')
     ->where('price_value >= ?', $params['price_min'])
     ->where('price_value <= ?', $params['price_max']);

$select->where('EXISTS('.$subQuery.')');
1 голос
/ 03 августа 2012

Я считаю, что это то, что вы ищете!:

<?php

// $select is instance of Zend_Db_Select
// $db is instance of Zend_Db_Adapter

$select->where('exists (?)', new Zend_Db_Expr(
    $db->quoteInto('select * from your_table where id = ?', $id, Zend_Db::PARAM_INT)
));

?>
0 голосов
/ 16 ноября 2011

Насколько я знаю, Zend_Db_Select не имеет специальных методов для включения подзапросов в предложение where. Я думаю, что вы не можете улучшить его дальше, как написано.

Вы можете переписать подзапрос как OUTER JOIN, и вы сможете использовать еще несколько Zend_Db_Select методов, но я не уверен в преимуществах этого, поскольку ваш код работает и ясно для чтения.

Надеюсь, это поможет,

...