Как создать выборку с использованием Zend с определенным столбцом DISTINCT? - PullRequest
1 голос
/ 09 августа 2011

Я использую Zend Framework для своего веб-сайта и хочу получить некоторые данные из моей базы данных PostgreSQL.

У меня есть запрос типа:

SELECT DISTINCT ON(e.id) e.*, f.*, g.* FROM e, f, g
WHERE e.id = f.id_e AND f.id = g.id_f

Этот запрос работает хорошо, но я не знаю, как конвертировать DISTINCT ON (e.id) с Zend. Кажется, что я могу получить строки DISTINCT, но без отдельных столбцов.

$select->distinct()->from("e")->join("f", "e.id = f.id_e")
->join("g", "f.id = g.id_f");

Есть идеи, как сделать выборку с отдельным столбцом?

Спасибо за помощь

1 Ответ

1 голос
/ 09 августа 2011

Вы, вероятно, не можете сделать это с Zend Framework, поскольку distinct on не является частью стандарта SQL ( конец страницы в документации Postgres ).Хотя Postgres поддерживает его, я бы предположил, что он не является частью Zend Framework, поскольку теоретически вы можете настроить другое соединение с базой данных, которое не обеспечивает поддержку.

Если вы заранее знаете, что разрабатываете для конкретной базы данных (Postgres в этом случае), вы могли бы вместо этого использовать написанные вручную заявления.Вы получите большую гибкость в запросах и более высокую производительность за счет того, что больше не сможете переключать базы данных.

Затем вы создадите Zend_Db_Apdapter для Postgres.Существуют различные методы для получения результатов для запросов SQL, которые описаны в документации инфраструктуры, начиная с раздела Чтение результатов запроса .Если вы решите пойти по этому пути, я бы порекомендовал создать собственный подкласс класса Zend_Db_Adapter_Pgsql.Это позволяет преобразовывать типы данных и генерировать исключения в случае ошибок вместо того, чтобы возвращать неоднозначные значения null и скрывать причины ошибок.

...