2014-10-04 116 views
0

我得到了下面的CakePHP發現情況:CakePHP的:找到忽略DISTINCT

$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命令被忽略。

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

你期待'DISTINCT'的記錄限制爲僅最近使用什麼 - 在「最近」是最大的名冊數據庫記錄。改性? – AgRizzo 2014-10-04 14:38:10

+0

是的。我認爲截然不同會取得最高紀錄,因此將最大的修改置於頂端。添加了一個示例 – Cheetah 2014-10-04 14:54:38

+0

這不是DISTINCT所做的。如果ID = 3的行不存在,那麼答案是什麼? _(谷歌「MySQL DISTINCT」,以更好地瞭解DISTINCT如何減少結果集中的行)_ – AgRizzo 2014-10-04 15:02:54

回答

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

末我合併這2個數組

0

DISTINCT不如果有多個字段給你一個不同的字段,如果你有不同的標題,它會提供不同的標題。

如果你有不同的id,title會輸出具有相同id和title的行的不同組合。

這是DISTINCT的工作原理。

嘗試的GroupBy 檢查本頁面以瞭解當http://www.mysqltutorial.org/mysql-distinct.aspx