2012-01-07 2 views
1

У меня есть галерея, и для ее отображения мне нужно получить немного информации, например, количество комментариев, рейтинг, favs и т. Д. Я делаю что-то вроде ниже, но для меня это не кажется хорошим. Как это сделать лучше? Может быть, есть ли способ сделать это в одном запросе без подзапросов?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, независимо от того, подходит ли ваш размер query_cache. Это зависит от размера проекта.

Надеюсь, что вам поможет немного.

+0

Благодарим вас за ответ. У меня есть реальности в таких таблицах, как «user_id» и «image_id», и у меня уже есть индексы в этих полях :). У меня есть еще несколько таблиц с подобной информацией, например «favourties» и т. Д. Резюме. Около 12 запросов на страницу, чтобы получить всю эту информацию, включая субсайтовый контент, и это причина моего вопроса, я не уверен, что это не так многие? –

Смежные вопросы