0

我得到了以下 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_ids 的名册记录,这就是我尝试使用 DISTINCT 的原因。我只需要最新的。这就是为什么我按 player_id 和 Roster.modified 排序结果。但是 DISTINCT 命令被忽略。

例如:
记录:

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 

我没有看到任何语法错误。也许有些命令不能一起使用,或者我的过滤方式是错误的。如果有人可以帮助我,那就太好了。

4

2 回答 2

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')
    ));

最后我合并了这两个数组

于 2014-10-04T16:04:52.760 回答
0

如果有多个字段,DISTINCT 不会为您提供一个不同的字段,如果您有不同的标题,它将提供不同的标题。

如果您有不同的 id , title 它将输出具有相同 id 和标题的行的不同组合。

这就是 DISTINCT 的工作原理。

尝试 GroupBy 检查此页面以了解在http://www.mysqltutorial.org/mysql-distinct.aspx时使用什么

于 2014-10-04T20:02:48.857 回答