我得到了以下cakephp查找情况:
$data = $this->find('all', array(
'conditions' => array(
'Roster.league_id' => $league_id,
'Roster.season' => $season,
),
'fields' => array(
'DISTINCT Roster.player_id',
'Roster.league_id',
'Roster.fflteam_id',
'Roster.season',
'Roster.modified',
'Fflteam.name',
'Player.firstName',
'Player.lastName',
'Player.position'
),
'order' => array(
'Roster.player_id',
'Roster.modified DESC'),
'contain' => array(
'Fflteam',
'Player' => array(
'Stat' => array(
'conditions' => array(
'Stat.season' => $season),
'Scores'),
'Teamplayer')
)
));
有更多具有特定player_id的名册记录,这就是我尝试使用DISTINCT的原因。我只需要最近的。这就是为什么我通过player_id和Roster.modified订购结果。但是DISTINCT命令会被忽略。
e.g:
记录:
id=1 player_id=1 modified=2012
id=2 player_id=1 modified=2013
id=3 player_id=1 modified=2014
id=4 player_id=2 modified=2014
id=5 player_id=2 modified=2013
结果应为:
id=3 player_id=1 modified=2014
id=4 player_id=2 modified=2014
我没有看到任何语法错误。也许有些命令不可能在一起,或者我的过滤方式是错误的。如果有人可以帮助我会很棒。
答案 0 :(得分:0)
正如AgRizzo建议我现在使用查询。
它分为2部分。第一个获得具有one2one关系的所有条目:
$this->query("SELECT *
FROM (SELECT * FROM `rosters` AS `Roster1` WHERE " . $conditions . " ORDER BY `Roster1`.`modified` DESC) AS `Roster`
LEFT JOIN `fflteams` AS `Fflteam` ON (`Roster`.`fflteam_id` = `Fflteam`.`id`)
LEFT JOIN `players` AS `Player` ON (`Roster`.`player_id` = `Player`.`id`)
GROUP BY `Player`.`id` ORDER BY `Roster`.`player_id` ASC");
第二部分与其关系获得所有one2many关系:
$this->Stat->find('all', array(
'conditions' => $conditions,
'contain' => array(
'Scores')
));
最后我合并了那两个数组
答案 1 :(得分:0)
如果有多个字段,DISTINCT不会给你一个不同的字段,如果你有不同的标题,它将提供不同的标题。
如果你有不同的id,title它将输出具有相同id和title的行的不同组合。
这就是DISTINCT的工作方式。
尝试GroupBy 查看此页面以了解http://www.mysqltutorial.org/mysql-distinct.aspx
时要使用的内容