Как правильно составить запрос?

Рейтинг: 0Ответов: 1Опубликовано: 29.10.2014

Есть теги на сайте. Они реализованы через таблицу связи (post_id, tag_id).
Нужно достать все новости с максимально повторяющимися тегами.

У меня есть вот такой код:

SELECT Post.id, Post.title
        FROM news_post Post
        INNER JOIN `news_post_tags` Post_Tags
        ON  Post.id = Post_Tags.post_id
        WHERE Post_Tags.tag_id IN (1, 2, 3, 4, 5, 6, 7) 
        GROUP BY Post_Tags.post_id 
        ORDER BY COUNT( Post_Tags.tag_id ) DESC

Он отлично работает, и теперь его нужно написать с помощью доктрины.

Я начал писать:

return $this->getEntityManager()
            ->createQuery("SELECT Post "
                . "FROM IlichNewsBundle:Post Post "
                . "INNER JOIN Post.tags Tags "
            )
            ->setFirstResult(0)->setMaxResults(50)->getResult();

Доктрина генерирует что-то такое:

SELECT 
  n0_.id AS id0, 
  n0_.slug AS slug1, 
  ... 
FROM 
  news_post n0_ 
  INNER JOIN news_post_tags n2_ ON n0_.id = n2_.post_id 
  INNER JOIN Tag t1_ ON t1_.id = n2_.tag_id 
LIMIT 
  50 OFFSET 0

Так вот, мне нужно получить доступ к таблице:

INNER JOIN news_post_tags n2_ ON n0_.id = n2_.post_id

То есть сделать что-то такое:

return $this->getEntityManager()
            ->createQuery("SELECT Post "
                . "FROM IlichNewsBundle:Post Post "
                . "INNER JOIN Post.tags Tags "
        GROUP BY n0_.post_id 
        ORDER BY COUNT( n0_.tag_id ) DESC;
            )
            ->setFirstResult(0)->setMaxResults(50)->getResult();

Как можно задать алиас вот этой таблице - news_post_tags?

Ответы

▲ 1

Запросы не объединяются через INNER JOIN. Через INNER JOIN объединяются таблицы в запросах. Чтобы объединить запросы, достаточно написать их друг за другом в одном скрипте.