Запрос Doctrine SQL: работает на MySQL, на PostgreSQL - нет - PullRequest
1 голос
/ 15 апреля 2010

Этот запрос автоматически генерируется расширением Taggable для Doctrine ORM.

SELECT t.id AS t__id, t.name AS t__name, COUNT(DISTINCT i.id) AS i__0,
   (COUNT(DISTINCT i.id)) AS i__1
FROM taggable_tag t
LEFT JOIN cms__model__image_taggable_tag c ON (t.id = c.tag_id)
LEFT JOIN image i ON i.id = c.id
WHERE t.id IN
    (SELECT doctrine_subquery_alias.id
     FROM
       (SELECT DISTINCT t2.id, (COUNT(DISTINCT i2.id)) AS i2__1
        FROM taggable_tag t2
        LEFT JOIN cms__model__image_taggable_tag c2 ON (t2.id = c2.tag_id)
        LEFT JOIN image i2 ON i2.id = c2.id
        GROUP BY t2.id HAVING i2__1 > 0
        ORDER BY i2__1 DESC LIMIT 10) AS doctrine_subquery_alias)
GROUP BY t.id HAVING i__1 > 0
ORDER BY i__1 DESC

Работает при использовании MySql, но не работает с PostgreSql.

Я получаю: column i2__1 not found или column i__2 not found.

Запрещены ли псевдонимы при использовании COUNT (DISTINCT)?
Как должен выглядеть этот запрос для работы с PostgreSql?

1 Ответ

1 голос
/ 15 апреля 2010

Вы можете попытаться заменить i2__1 на COUNT(DISTINCT i2.id) в HAVING -пункте дополнительного выбора или удалить скобки вокруг COUNT(DISTINCT i2.id).

Возможно, вам также придется добавить t__name до GROUP BY предложения основного выбора.

...