2013-03-07 10 views
9

Modellerimde aşağıdaki sorguyu kullanarak veritabanı değerlerini azalan sırada sıralamak istiyorum. Ancak, veritabanındaki tüm değerleri azalan sırada sıralamakla kalmaz, ancak yükselme kullanıldığında, iyi çalışır. Geçen on

function sort_all_courses_desc($tennant_id) 
{ 
    $this->db->select('*'); 
    $this->db->where('tennant_id',$tennant_id); 
    $this->db->order_by("course_name","desc"); 
    $this->db->from('courses'); 
    $query=$this->db->get(); 
    return $query->result(); 
} 
+3

Dersin Adı ile ilgili bir şey olduğundan şüphelenirim. Bu test edilmemiştir, ancak karşılaştırmak için vakayı standart hale getirmeyi deneyebilirsiniz. '$ this-> db-> order_by (" LOWER (course_name) "," desc "); –

+1

" O ", son kontrol ettiğim" S "den önce gelir. Bu doğru azalan emirdir! – landons

cevap

9

nerede öncesine ait koyun ve order_by:

$this->db->select('*'); 
$this->db->from('courses'); 
$this->db->where('tennant_id',$tennant_id); 
$this->db->order_by("UPPER(course_name)","desc"); 

Veya deneyin İKİLİ:

ORDER BY BINARY course_name DESC; 

Sen ikili ayrıştırma için CodeIgniter'da elle eklemek gerekir.

Ve "course_name" karakter sütununu ayarlayın.

Sıralama, bir karakter türü sütununda kullanılıyorsa, normalde sıralama, büyük/küçük harf duyarlı olmayan bir biçimde gerçekleştirilmiş olan şeklindedir.

Dersler tablosunda ne tür yapı verileri var? (Referans: http://php.net/manual/en/function.natcasesort.php) örnek olarak veritabanından

Kişisel dizi: $array_db = $result_from_db:

"doğal düzen" düzenden

Kullanım natcasesort:

Eğer diziye koymak ve PHP kullanarak dönebilirsiniz sinirli olursa

$final_result = natcasesort($array_db); 

print_r($final_result); 
3

sorgunuzun üst kısmındaki çizgiyi $this->db->order_by("course_name","desc"); koyun.

$this->db->order_by("course_name","desc");$this->db->select('*'); 
$this->db->where('tennant_id',$tennant_id); 
$this->db->from('courses'); 
$query=$this->db->get(); 
return $query->result();