0

---- Symfony2.3.​​1 と Doctrine2 で完了 ----

申し訳ありませんが、私の問題に適した解決策を見つけるのに愚かすぎなかったことを願っています。何時間もクエリを作成しようとします。

SELECT * FROM product
    WHERE product_id in
    (
       SELECT product_id from (
          SELECT count(*) as result_amount, product_id FROM product_x_attribut
          JOIN productattribut on productattribut_id = productattribut.id
          WHERE (
            productkey = "price" and
            stringType = "premium"
          ) or (
            productkey = "size" and 
            stringType = "S"
          )
          GROUP BY product_id
          HAVING result_amount = 2
       ) as temp
    )
GROUP BY product_id
ORDER BY p0_.name ASC

これは phpmyAdmin で正常に動作する SQL です。

これは次のように見ることができます

Select * from abc where abc.x in ( Select * from ( select * from ) as abcd )

したがって、1 つのコア クエリがあり、私はそれを subSubQuery と呼びます。コアの周りの 2 番目のクエリは subQuery と呼ばれ、外側のクエリは単なる外側のクエリであり、サブクエリではありません。Doctrine2 で subSubQuery を構築できました。

しかし、私はこのようにサブクエリを構築することはできません

Select product_id from ( $subSubQuery->getQuery()->getDQL() )

このようにサブクエリを実行したい

$subQuery = $repositoryProduct->createQueryBuilder('product');
$subQuery->add('select', 'product_id');
$subQuery->add('from',$subSubQuery->getDQL() );
// However to set an alias is a miracle for me, this didnt work off course
$subQuery->add('as','tmp' );

これがサブクエリです。外側のクエリも作成できません

Select * from abc where abc.x in ( $subQuery->getQuery()->getDQL() )

こういうのやりたい

$query->where(
  $query->expr()->in('product.id', $subQuery->getDQL() )
);

しかし、私はDoctrine2でこれを次のように構築しようとしています:

私はとても落ち込んでいます。->getSQL()、->getDQL() を試しました。この問題を解決するための適切な小さなステップとして検出できる限り試してみました。Google でできるだけ多くのキーワードを試しました。私の指は書くことができました...誰かが解決策を見つけるのを手伝ってくれることを願っています...

それぞれの有益なアドバイスに感謝します。

4

1 に答える 1