ali*_*don 11 cakephp extract distinct find cakephp-2.0
我有一个让我疯狂的问题,我不得不承认我在CakePHP中没有经验.正如在这个问题中提到的, 在CakePHP查找函数中使用DISTINCT,这样使用DISTINCT:
$this->Model->find('all', array('fields'=>'DISTINCT field_name'));
Run Code Online (Sandbox Code Playgroud)
不返回DISTINCT值,而是返回所有行.事实上,这里的DISTINCT完全没有意义,因为由于某种原因,CakePHP补充道TableName
.id
在SQL查询中(为什么??我可以删除id引用??),有效地返回每个DISTINCT主键(= all rows = unhelpful).
所以,我仍然想要返回特定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')
)
?>
Run Code Online (Sandbox Code Playgroud)
资料来源:http://book.cakephp.org/2.0/en/models/retrieving-your-data.html
这表明DISTINCT应该可以使用,但是这里有什么用呢?(User.name)对应于我想要DISTINCT的field_name还是my_column_name my field_name?
最后,从CakePHP 1.x迁移到CakePHP 2.x时,是否有任何改变?即在Stackoverflow上看到的CakePHP 1.x的答案仍然相关吗?
提前致谢!
dho*_*tet 10
是的,第二个片段是SELECT DISTINCT
在CakePHP 2.x中执行a的正确方法.User.name
对应于字段名称,在本例中对应name
于users
表中的字段.my_column_name
是结果集中字段名称的(可选)别名,name
即将my_column_name
在结果集中命名字段而不是字段.
小智 6
在条件查找中使用distinct的正确方法是:
$this->Model->find('all', array('fields' => array('DISTINCT Model.database_fieldname'),'conditions' => array('Model.database_fieldname' =>$val )));
Run Code Online (Sandbox Code Playgroud)
其中$ val包含您要在查询中传递的值.
祝你今天愉快