如何使用Zend构建具有DISTINCT特定列的选择



我正在使用Zend框架为我的网站,我想从我的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转换。似乎我可以得到不同的行,但没有不同的列。

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

关于如何使用不同的列进行选择,有什么想法吗?

Thanks for help

您可能无法使用Zend框架,因为distinct on不是SQL标准的一部分(Postgres文档中的页面结束)。虽然Postgres支持它,但我认为它不是Zend框架的一部分,因为理论上你可以配置另一个不提供支持的数据库连接。

如果你事先知道你正在为一个特定的数据库(在这个例子中是Postgres)开发,你可以使用手动编写的语句来代替。您将在查询中获得更大的灵活性和更好的性能,但代价是不再能够切换数据库。

然后为Postgres实例化一个Zend_Db_Apdapter。有各种方法可以用于获取SQL查询的结果,这些方法在框架文档中从读取查询结果一节开始描述。如果您选择走这条路,我建议创建Zend_Db_Adapter_Pgsql类的一个子类。这是为了能够转换数据类型并在出现错误时抛出异常,而不是返回模棱两可的null值并隐藏错误原因。

最新更新