在CakePHP find函数中使用DISTINCT

前端之家收集整理的这篇文章主要介绍了在CakePHP find函数中使用DISTINCT前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在写一个Cake PHP 1.2应用程序我有一个列表,我希望用户能够过滤不同的字段.对于每个可过滤的字段,我有一个下拉列表.选择过滤器组合,单击过滤器,该页面显示匹配的记录.

在people_controller中,我有这个代码

$first_names = $this->Person->find('list',array(
    'fields'=>'first_name','order'=>'Person.first_name ASC','conditions'=> array('Person.status'=>'1')
));
$this->set('first_names',$first_names);

(Status = 1,因为我正在使用软删除.)

这将创建所有first_names的有序列表.但重复的是在那里.

在Cookbook中搜索,我发现一个使用DISTINCT关键字并修改了我的代码来使用它的例子.

$first_names = $this->Person->find('list',array(
    'fields'=>'DISTINCT first_name','conditions'=> array('Person.status'=>'1')
));

这给我一个sql错误,如下所示:

Query: SELECT `Person`.`id`,DISTINCT `Person`.` first_name` FROM `people` AS `Person`   WHERE `Person`.`status` = 1   ORDER BY `Person`.`first_name` ASC

问题很明显框架正在向查询添加Person.id.我怀疑这是使用’列表’.

当点击过滤器按钮时,我将使用所选过滤器创建一个sql语句.我不需要这个字段,但不能摆脱它.

谢谢,
弗兰克·卢克

你说得对,看来你不能用列表DISTINCT.因为你不需要id,只能使用这些名字,你可以使用上面的所有内容,然后$first_names = Set :: extract($first_names,’/ Person / first_name’);.这将给你一个具有不同名字的数组.

猜你在找的PHP相关文章