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、propel クエリでサブクエリで基準を使用することができます。

2 番目のオプションの例を次に示します。

$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)

このオプションの唯一の問題は、1 つではなく2 つのクエリを作成していることです。これはパフォーマンスに影響を与える可能性がありますが、もちろんアプリケーションによって異なります。

于 2013-03-01T01:42:06.427 に答える