Cakephp Минимальное значение запроса - PullRequest
0 голосов
/ 10 июля 2011

У меня есть эта проблема с Cakephp, где я могу получить минимальное значение из поля счета, но я не могу получить идентификатор для той же строки, используя также группу. Ниже мой код. Что я делаю не так?

function index() {
    $this->Leaderboard->recursive = 0;
    $this->set('leaderboards', $this->paginate());

    $min = $this->Leaderboard->find('all',
    array(
        'fields' => array('MIN(Leaderboard.score) as min_score')    
        ));
        $minimum = $min[0][0]['min_score'];
        pr($min);   
        echo $minimum;
    if (!empty($this->data)) {
        $this->Leaderboard->create();
        if($this->data['Leaderboard']['score'] > $minimum){
        if ($this->Leaderboard->save($this->data)) {
            $this->Session->setFlash(__('The leaderboard has been saved', true));
            $this->Leaderboard->delete($min[0]['Leaderboard']['id']);
        } else {
            $this->Session->setFlash(__('The leaderboard could not be saved. Please, try again.', true));
        }
        } else {
            $this->Session->setFlash(__('Score not high enough for leaderboard',true));
        }
    }
    $users = $this->Leaderboard->User->find('list');
    $trips = $this->Leaderboard->Trip->find('list');
    $this->set(compact('users', 'trips'));
}

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

Вы должны использовать подзапрос для получения идентификатора для той же строки, что и для минимальной строки ..

Запрос будет что-то вроде этого

SELECT id 
FROm Leaderboard 
WHERE score IN (
    SELECT MIN(score) 
    FROM Leaderboard
        );

и как использовать подзапросы в cakephp, посмотрите на http://book.cakephp.org/view/1030/Complex-Find-Conditions

Я выполнил ту же задачу, но другим способом

$minimum = $this->Leaderboard->find('first',array(
    'fields'=>array('MIN(score) as MinimumScore')));

$data = $this->Leaderboard->find('first',array(
    'fields'=>array('id'),
    'conditions'=>array('score'=>$minimum[0]['MinimumScore'])));

и теперь вы можете получить доступ к идентификатору как

 $id = $data['Leaderboard']['id'];

Надеюсь, эта помощь

0 голосов
/ 10 июля 2011

Вы можете попробовать что-то вроде этого.** Отказ от ответственности - я не тестировал этот код, но он слишком длинный, чтобы поместиться в комментарии, поэтому ...

$min = $this->Leaderboard->find('first', array(
        'fields' => array('Leaderboard.id', 'Leaderboard.score'),
        'order' => 'Leaderboard.score ASC'
        )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...