1

1つのテーブルでDQLを使用して値を計算しようとしています。このテーブルの名前が「TABLE」であるとします。それは5つの列を持っています:

  • id
  • people_count
  • animal_count
  • region_id
  • type_id

私が探している結果は、人の合計(地域ごとにグループ化されている場合)を動物の合計(タイプごとにグループ化されている場合)で割ったものです。

SQLは次のようになります。

SELECT SUM(people_count) / 
(
    SELECT SUM(animal_count) 
    FROM TABLE t2 
    GROUPED BY type_id
) 
FROM TABLE t1 
GROUPED BY region_id

DQLを使用してDoctrineでそれをどのように行いますか?

4

2 に答える 2

1

別のクエリを作成して実行し、その結果を最初のクエリに含めることで、問題を解決しました。

簡単な例を扱っている場合、これはおそらく最善の方法ではありませんが、コードアーキテクチャに関してはこれが唯一の解決策でした。

于 2012-06-19T09:20:53.527 に答える
0

私には解決策がありますが、おそらくあなたの問題を解決するための最良の解決策があると思います。

いずれにせよ、2つのクエリを作成し、最初のクエリの結果を2番目のクエリにインポートすることが解決策になる可能性があります。残念ながら、これはデータベースの使用率が低いです。さらに、例ごとに列の結果でソートするために1つのSQLのみを実行する必要がある場合もあります。

<?php

namespace AppBundle\Repository;

use AppBundle\Entity\MyClass;
use Doctrine\ORM\EntityRepository;

class MyRepository extends EntityRepository
{
    public function findWithSubQuery()
    {
        return $this->createQueryBuilder('a')
                    ->addSelect(sprintf(
                        "(SELECT COUNT(b.id) FROM %s AS b WHERE b.a = a.id GROUP BY a.id) AS otherColumn",
                        MyClass::class
                    ))
                    ;
    }
}

私はこのソリューションを使用します。たぶん、サブクエリはDQL文字列ではなくDQLオブジェクトで書くことができます。

于 2016-06-29T09:44:57.767 に答える