2013-03-01 2 views
1

Вот MySQL:Как преобразовать этот оператор MySQL в symfony Propel?

SELECT * 
FROM tbl1 
WHERE name > (
    SELECT name 
    FROM tbl1 
    WHERE id = 3 
) 
ORDER BY name 

Вот моя догадка в коде Propel, но это не работает:

$c = new Criteria(); 
$c->addAscendingOrderByColumn(CartPeer::ITEM_NAME); 
$c->add(CartPeer::CATEGORY, $c->add(CartPeer::ITEM_ID, $item->getItemId()), Criteria::GREATER_THAN); 

В ответ на this question

ответ

1

Propel не имеет стандартный способ выполнения подзапросов как часть критериев.

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

Вот пример второго варианта:

$c = new Criteria(); 

$subSelect = "cart.category > (
    SELECT cart.category 
    FROM carts 
    WHERE carts.id = 3)"; 

$c->add(CartPeer::CATEGORY, $subSelect, Criteria::CUSTOM); 

EDIT: Вот пример первого варианта

// find the object we want to compare against 
$c = new Criteria(); 
$c->add(CartPeer::ID, 3); 
$cart = CartPeer::doSelectOne($c) 

// then make the actual criteria 
$c = new Criteria(); 
$c->add(CartPeer::CATEGORY, $cart->getCategory(), Criteria::GREATER_THAN) 

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

+0

Спасибо. У вас есть пример первого варианта? –

+0

Дайте мне немного времени, и я также добавлю пример: 3 – asermax

+0

Hooray. Благодарю. –