2

私はsymfony 1.0にあるプロジェクトに取り組んでいます

推進クエリの作成に問題があります。

私は2つのテーブルを持っています

  1. id     name
    1       a
    2       b
    3       c
    
  2. 特徴

    id    car_id    feature
    1      2         f1
    2      2         f2
    3      2         f3
    4      1         f1
    5      3         f3
    6      3         f2
    7      3         f4
    

これは table と value を持つ SQLFiddleです。

私は機能を持っていますarray(f1,f2,f3)。ここで、3 つの機能すべてを備えた車、つまりこの場合は "b" の車のみが必要です。

試してみましたが、満足のいく結果が得られません

$c = new Criteria();
$c->clearSelectColumn();
$c->addSelectColumn(CarPeer::NAME);
$c->addSelectColumn(FeaturePeer::CAR_ID);
$c->addJoin(CarPeer::ID,FeaturePeer::CAR_ID,Criteria::LEFT_JOIN);
$c->add(FeaturePeer::FEATURE,array(f1,f2,f3),Criteria::IN);
$c->addGroupBy(CarPeer::ID);
$resultset = CarPeer::doSelectRs($c);
4

1 に答える 1

1

これがあなたが望むSQlだと思います(とにかく私のSQL Fiddleで動作するようです):

SELECT car_id FROM
  (SELECT COUNT(car_id) AS feature_count, car_id FROM feature
    WHERE feature IN ('f1', 'f2', 'f3') GROUP BY car_id
  ) car_features
WHERE car_features.feature_count=3

これを Propel で取得するには、次のようにする必要があります。

$features = array("f1", "f2", "f3");
$featureCount = FeatureQuery::create()
  ->withColumn("COUNT(car_id)", "feature_count")
  ->add(FeaturePeer::FEATURE, $features, Criteria::IN)
  ->addGroupBy(CarPeer::ID);
$cars = CarQuery::create()
  ->addSelectQuery($featureCount, "car_features")
  ->where("car_features.feature_count = ?", sizeof($features))
  ->find();
于 2013-01-10T03:02:29.927 に答える