2010-04-15 1 views
1

Это запрос, автоматически генерируемый расширением Taggable для Doctrine ORM.Doctrine SQL-запрос: работает на MySQL, на PostgreSQL не будет

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

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

Возможно, вам также необходимо будет добавить t__name в GROUP BY -clause основного выбора.

+0

Спасибо, все. Это ошибка в доктрине или моей версии PostgreSql? Или просто этот синтаксис вообще не поддерживается PostgreSql? – takeshin

+0

Какое предложение действительно вам помогло? –

+0

Удаление скобок ничего не делало. Мне пришлось повторять COUNT в HAVINGs вместо псевдонимов (будет ли это медленнее?). Очевидно, что t.name также требуется в GROUP BY. – takeshin

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