2011-01-03 3 views
1

Я работаю над приложением для торта php. В этом я использую jqgrid для отображения моих записей.Как найти последнюю запись одного пользователя из таблицы?

Это мой CTP файл:

<script type="text/javascript"> 
    jQuery(document).ready(function(){ 
     jQuery("#list").jqGrid(
     { 
      url:'<?php if(!empty($this->params["named"]["batch"]))echo $this->Html->url(array("controller" => "placements", "action" => "report17", "ajax" => true,"batch"=>$this->params["named"]["batch"])); else echo $this->Html->url(array("controller" => "placements", "action" => "report17", "ajax" => true)); ?>', 
      datatype: "json", 
      mtype: "GET", 
      colNames:['Student','Phone No.','Batch','Created'], 
      colModel:[ 
       {name:'studentname',index:'studentname', width:30, search:true}, 
       {name:'contactnumber1',index:'contactnumber1', width:20, search:true}, 
       {name:'batchname',index:'batchname', width:30, search:true}, 
       {name:'latest',index:'latest', width:30, search:true}, 

      ], 
      rowNum:10, 
      rowList:[10,20,30], 
      pager: jQuery('#pager'), 
      sortname: 'latest', 
      viewrecords: true, 
      sortorder: "desc", 
      caption:"Placements", 
      height:"auto", 
      autowidth: true, 
      navigator:true 
     }); 
     jQuery("#list").navGrid("#pager",{edit:false,add:false,del:false,search:false}); 
     jQuery("#list").jqGrid('filterToolbar'); 
    }) 
</script> 

И это моя функция, определенная в контроллере

$conditions = array(); 
      if(!empty($this->params['named']['batch'])) 
      array_push(&$conditions, array('Batch.id' => $this->params['named']['batch'])); 
      array_push(&$conditions, array('Student.type' => 'student')); 
      array_push(&$conditions, array('Student.trainingcompleted' => '1')); 
      $result = $this->Placement->find('all', array(
       'fields' => array('id','student_id','company_id','branch_id','max(Placement.created) as latest'), 
       'link' => array(
        'Student' => array(
         'Batch' 
        ), 
        'Company' 
       ), 
       'group'=>'Placement.student_id', 
       'conditions'=>$conditions, 
       'order' => $sort_range, 
       'limit' => $limit_range 
      )); 
     } 

     $i = 0; 
     $response->page = $page; 
     $response->total = $total_pages; 
     $response->records = $count; 

     //pr($result); 

     foreach($result as $result) 
     { 
      $response->rows[$i]['id'] = $result['Placement']['id']; 

      $student = "<a href='" . APP_URL . "students/view/" . $result['Student']['id'] . "/by:student'>" . $result['Student']['fullname'] . "</a>"; 
      $batch = "<a href='" . APP_URL . "batches/view/" . $result['Batch']['id'] . "'>" . $result['Batch']['name'] . "</a>"; 
      $contactnumber1 =$result['Student']['contactnumber1']; 

      $response->rows[$i]['cell'] = array($student, $contactnumber1, $batch,$result['Placement']['latest']); 
      $i++; 
     } 

     echo json_encode($response); 

В таблице мест размещения может быть больше, чем один вход для студента.

См., Например,

id student_id istillworking created 
1 16  no   2010-09-07 10:02:16 
2 16  yes   2010-12-30 12:48:44 

Я хотел показать последнюю запись для каждого пользователя. Например, для student_id 16 он должен получить запись, созданную в 2010-12-30 12:48:44.

Я попытался реализовать это через мой код выше. Но я получаю следующее сообщение об ошибке:

Предупреждение (512): SQL Error: 1054: Неизвестный столбец «Placement.latest» в «пункта порядка»

Я не могу разобраться в проблеме ,

Пожалуйста, помогите мне в этом

Спасибо,

Pankaj Хурана

+0

Что $ Sort_range содержат, я думаю, что в настоящее время он содержит «размещения» он должен содержать «созданный» –

+0

Hi Шакти, диапазон сортировки содержит: Placement.latest DESC –

+0

Измените его на Placement.created desc –

ответ

0

Либо ваша таблица «размещения» не имеет столбец «последнее» или вы не пропуская его через в $ результат переменная. Возможно, вы указали столбцы в операторе поиска и не вошли в «последние».

Попробуйте положить debug ($ result); внутри цикла. Это покажет вам данные, которые были переданы.

Кстати, это не очень хорошая идея, чтобы сделать

foreach($result as $result) 
{ 
    ... 
} 

... кроме того, что грамматически неправильно, это может привести к непредсказуемому поведению позже. Лучше передать результат в $ результаты (множественное число) и сделать

foreach($results as $result) 
{ 
    ... 
}