2013-03-01 40 views
1

下面是MySQL的:如何將此MySQL語句轉換爲symfony Propel?

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

這裏的在行走代碼我最好的猜測,但它不工作:

$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

行走沒有標準作爲標準的一部分進行子查詢的方式。

您可以將您的查詢分開(獲取您想要與第一個進行比較的值,然後將其用於原始查詢),或在您的推進查詢中對子查詢使用CUSTOM條件。

這裏的第二選項的示例:

$c = new Criteria(); 

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

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

編輯:這是第一個選項的示例

// 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

謝謝。你有第一個選擇的例子嗎? – 2013-03-01 01:45:28

+0

給我一點時間,我會給它添加一個例子:3 – asermax 2013-03-01 01:50:08

+0

Hooray。謝謝。 – 2013-03-01 01:50:15

相關問題