2017-05-16 1 views
0

ich eine Tabelle aus here nach dem Vorbild machen, und ich habe alles läuft außer bekam eine Sache, denn ich kann nicht herausfinden:Datentabellen Tabellenreihenfolge mit zwei Regeln

Wie kann ich bestellen und stellen Sie die Erstbestellung der Tabelle, mit den Werten der Spalte "numeroregisto", wenn diese Werte als "XXX/YY" kommen - ich würde es brauchen, so dass es zuerst die Zahlen auf der rechten Seite des Schrägstrichs bestellt, und dann die auf der links. Die Zahlen auf der rechten Seite sind immer zwei Ziffern, die auf der linken Seite können zwischen einer und fünf Ziffern variieren.

ORDER BY cast(substring_index(numeroregisto, '/', - 1) AS signed INTEGER), cast(substring_index(numeroregisto, '/', 1) AS signed INTEGER) ASC 

Aber ich kann Figur scheinen, wie diese Arbeit mit diesem Ansatz zu machen:

Auf einem anderen ocasion, einen anderen Ansatz verwendet wurde, wurde ich so zu tun, sagte

var $table_registos = 'registos'; 
    var $column_order_registos = array('numeroregisto','dataregisto','amostra','especies.especie','requisitante',null); //set column field database for datatable orderable 
    var $column_search_registos = array('registos.numeroregisto','registos.dataregisto','registos.amostra','especies.especie','requisitante'); //set column field database for datatable searchable just firstname , lastname , address are searchable 
    var $order_registos = array('numeroregisto' => 'ASC'); // default order 


private function _get_datatables_query_registos() 
    { 
     $this->db->select('registos.*, origemmaterial.id AS omid, origemmaterial.origem, meioconservacao.id AS mcid, meioconservacao.meio, especies.id AS esid, especies.especie'); 
     $this->db->from('registos, origemmaterial, meioconservacao, especies'); 
     $this->db->where('registos.origemid=origemmaterial.id AND registos.meioid=meioconservacao.id AND registos.especieid=especies.id'); 


     $i_registos = 0; 

     foreach ($this->column_search_registos as $item) // loop column 
     { 
      if($_POST['search']['value']) // if datatable send POST for search 
      { 

       if($i_registos===0) // first loop 
       { 
        $this->db->group_start(); // open bracket. query Where with OR clause better with bracket. because maybe can combine with other WHERE with AND. 
        $this->db->like($item, $_POST['search']['value']); 
       } 
       else 
       { 
        $this->db->or_like($item, $_POST['search']['value']); 
       } 

       if(count($this->column_search_registos) - 1 == $i_registos) //last loop 
        $this->db->group_end(); //close bracket 
      } 
      $i_registos++; 
     } 

     if(isset($_POST['order'])) // here order processing 
     { 
      $this->db->order_by($this->column_order_registos[$_POST['order']['0']['column']], $_POST['order']['0']['dir']); 
     } 
     else if(isset($this->order_registos)) 
     { 
      $order_registos = $this->order_registos; 
      $this->db->order_by(key($order_registos), $order_registos[key($order_registos)]); 
     } 
    } 

Jede Hilfe wäre willkommen, vielen Dank im Voraus!

+0

Was ist das Problem mit dem aktuellen Code ist? Können Sie den Code zu dem Teil, wo Sie denken, dass das Problem ist, eng einbinden? – Shadow

+0

Ich habe den Post bearbeitet, um ihn wie vorgeschlagen zu verengen, denke, dass es jetzt klar sein sollte. Danke! – Baya

Antwort

0

Problem gelöst, und ganz von selbst yeay! wünschte nur, ich mit einer eleganteren Lösung kommen könnte:

private function _get_datatables_query_registos() 
    { 
     $this->db->select('registos.*, origemmaterial.id AS omid, origemmaterial.origem, meioconservacao.id AS mcid, meioconservacao.meio, especies.id AS esid, especies.especie'); 
     $this->db->from('registos, origemmaterial, meioconservacao, especies'); 
     $this->db->where('registos.origemid=origemmaterial.id AND registos.meioid=meioconservacao.id AND registos.especieid=especies.id'); 


     $i_registos = 0; 

     foreach ($this->column_search_registos as $item) // loop column 
     { 
      if($_POST['search']['value']) // if datatable send POST for search 
      { 

       if($i_registos===0) // first loop 
       { 
        $this->db->group_start(); // open bracket. query Where with OR clause better with bracket. because maybe can combine with other WHERE with AND. 
        $this->db->like($item, $_POST['search']['value']); 
       } 
       else 
       { 
        $this->db->or_like($item, $_POST['search']['value']); 
       } 

       if(count($this->column_search_registos) - 1 == $i_registos) //last loop 
        $this->db->group_end(); //close bracket 
      } 
      $i_registos++; 
     } 

     if(isset($_POST['order'])) // here order processing 
     { 
      if($_POST['order']['0']['column']=='0' && $_POST['order']['0']['dir']=='asc'){ 

      $this->db->order_by('substring(numeroregisto,-2,2) ASC'); 


     } 
     elseif($_POST['order']['0']['column']=='0' && $_POST['order']['0']['dir']=='desc'){ 

      $this->db->order_by('substring(numeroregisto,-2,2) DESC'); 


     } 
      else{ 
      $this->db->order_by($this->column_order_registos[$_POST['order']['0']['column']], $_POST['order']['0']['dir']); 
      } 
     } 
     else if(isset($this->order_registos)) 
     { 
      $order_registos = $this->order_registos; 
      $this->db->order_by('substring(numeroregisto,-2,2) ASC'); 
     } 
    } 
Verwandte Themen