1

这是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);

在回答这个问题

4

1 回答 1

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)

此选项的唯一问题是您正在执行两个查询而不是一个,这可能会影响您的性能,但这当然取决于您的应用程序。

于 2013-03-01T01:42:06.427 回答