这是MySQL:
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);
答案 0 :(得分: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);
编辑:以下是第一个选项的示例
// 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)
此选项的唯一问题是您正在进行两个查询而不是一个,这可能会影响您的效果,但这取决于您的应用程序。