【发布时间】:2012-06-23 15:52:48
【问题描述】:
我有一个让我发疯的问题,我不得不承认我在 CakePHP 方面没有那么丰富的经验。正如这个问题中提到的, Using DISTINCT in a CakePHP find function,以这种方式使用 DISTINCT:
$this->Model->find('all', array('fields'=>'DISTINCT field_name'));
不返回 DISTINCT 值,而是返回所有行。事实上,这里的 DISTINCT 完全没有意义,因为出于某种原因,CakePHP 在 SQL 查询中添加了TableName.id(为什么??我可以删除 id 引用吗??),有效地返回每个 DISTINCT 主键(=所有行=无用)。
所以,我仍然想返回特定 field_name 列的 DISTINCT 值。我不能只使用 find('all') 或 find('list') 函数吗?使用上面链接中描述的 Set::extract() 函数真的是正确的方法吗?这似乎是 CakePHP 的一个过于间接的解决方案,通常 Cake 让我的生活更轻松。 :-) 一起使用 find 和 DISTINCT 的正确方法是什么?也许 DISTINCT 不适用于 find()?
查看 CookBook,他们说:“执行 DISTINCT 查询的简单示例。您可以以类似的方式使用其他运算符,例如 MIN()、MAX() 等:”
<?php
array(
'fields' => array('DISTINCT (User.name) AS my_column_name'),
'order' = >array('User.id DESC')
)
?>
来源:http://book.cakephp.org/2.0/en/models/retrieving-your-data.html
这表明 DISTINCT 应该可以使用,但这里是什么? (User.name) 是否对应于我想要 DISTINCT 的 field_name 还是 my_column_name 我的 field_name?
最后,当从 CakePHP 1.x 迁移到 CakePHP 2.x 时,这是否有任何改变?即在 Stackoverflow 上看到的 CakePHP 1.x 的答案是否仍然相关?
提前致谢!
【问题讨论】:
标签: cakephp find cakephp-2.0 distinct extract