1

特定のショップに属するすべての顧客を返す教義クエリがあります。合計で 29 のレコードが返されます。ただし、ほぼ同じ DQL を使用してカウント クエリを実行すると、異なる数の結果が得られます。

Query1 - 結果のフェッチ:

SELECT c FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3)

戻り値 (count() を使用して、返されたレコードの数をカウントします)

int(29) 


Query2 - カウント結果:

SELECT count(c) FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3)

戻り値:

array(1) { [0]=> array(1) { [1]=> string(2) "36" } }


私はそれがどのように起こっているのか理解できないようですか?うまくいけば、誰かが助けることができます...

4

2 に答える 2

1

「GROUPBY(c)」が必要だと思います

于 2012-07-05T18:07:25.713 に答える
1

同じ顧客が2つのショップに関連付けられている場合、生のSQLランドで2行を取得するという状況を考慮する必要があります。

Doctrineは、レコードを返すハイドレーションステップでこれを説明し、$qb->getQuery()->getResults()(手動で処理する必要がある重複のあるものではなく)意味のある結果セットを返します。

Doctrineがクエリから生成するSQLをエコーアウトし、$qb->getSQL()Phpmyadmin、MySQL Workbench、Sequel Proなどを介して実行し、それをから返された結果と比較することで、この違いを最もよく視覚化できます。getResults()

于 2012-07-05T20:50:23.120 に答える