2012-01-07 25 views
1

私はギャラリーがあり、それを表示する必要がありますコメント、評価、favsの数のようないくつかの情報を取得する必要があります。私は以下のようなことをしますが、 より良い方法でそれを行うには?たぶんサブクエリなしで、1つのクエリでそれを行う方法はありますか?Symfony - 複数のテーブルから選択

コメント数、favs数などの画像列に追加することができますが、何か問題が生じた場合、統計情報は現実にはなりません。毎回それを数えることはより信頼性があります。

$images = $this->getDoctrine()->getEntityManager() 
    ->createQuery('SELECT img 
    FROM AcmeMainBundle:Image img 
    WHERE img.category = :category 
    ORDER BY img.order ASC, img.id DESC') 
    ->setParameter('category', $category) 
    ->getResult(); 



$comments = $this->getDoctrine()->getEntityManager() 
    ->createQuery('SELECT i.id, COUNT(i.id) as c_count 
    FROM AcmeMainBundle:ImgComment c 
    JOIN c.image i 
    WHERE i.category = :category 
    GROUP BY c.image') 
    ->setParameter('category', $category) 
    ->getResult();  



$ratings = $this->getDoctrine()->getEntityManager() 
    ->createQuery('SELECT i.id, SUM(r.rating) as suma, COUNT(r.rating) as votes 
    FROM AcmeMainBundle:ImgRating r 
    JOIN r.image i 
    WHERE i.category = :category 
    GROUP BY r.image') 
    ->setParameter('category', $category) 
    ->getResult(); 

答えて

2

ほとんどの場合、これは問題ありません。あなたが何千もの異なるカテゴリを持っていなければ、sqlがクエリと結果をキャッシュするのはかなり幸運です。それはまた、計算のための画像当たりの平均評価量に依存する。 SQLで生成されたSQLクエリとベンチマーク、それをコピーしよう:あなたはイメージのためのケースであるべきである(頻繁に更新されていないサブクエリ計算に使用するフィールドにインデックスを持っている必要があり

EXPLAIN $yourquery

マインド評価)。

あなたのmysql staticticsを調べたいと思うかもしれません。あなたのquery_cacheサイズが適切かどうか。それは実際にプロジェクトのサイズに依存します。

ほんの少しお手伝いします。

+0

ありがとうございました。私は "user_id"と "image_id"のようなこのテーブルでは、私はすでにこのフィールドにインデックスを持っているリアリズムを持っている:)。私は「favourties」などのような類似の情報を持つテーブルをいくつも持っています。サブサイトのコンテンツを含むこれらの情報をすべて取得するために、ページあたり約12のクエリが要約されています。それは私の質問の原因です。たくさんの? –

関連する問題