2013-03-01 92 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

相关问题