2014-12-15 2 views
0

codeigniter를 사용하고 있습니다. 내 모델 중 하나에서 UNION을 사용하여 두 테이블의 데이터베이스에서 데이터를 검색하는 함수를 정의했습니다. 검색된 개체 배열을 'date_submitted'속성에서 정렬되도록합니다. 다음 코드를 사용하려고했지만 원하는 결과가 표시되지 않습니다.데이터베이스에서 가져온 객체 배열 정렬

여기가

array (size=7) 
    0 => 
    object(stdClass)[31] 
     public 'id' => string '1' (length=1) 
     public 'user_id' => string '2' (length=1) 
     public 'title' => string 'My Painting2' (length=12) 
     public 'category' => string '1' (length=1) 
     public 'date_submitted' => string '2014-09-26 23:00:09' (length=19) 

    1 => 
    object(stdClass)[32] 
     public 'id' => string '2' (length=1) 
     public 'user_id' => string '2' (length=1) 
     public 'title' => string 'Second artwork' (length=14) 
     public 'category' => string '2' (length=1) 
     public 'date_submitted' => string '2014-09-27 01:09:03' (length=19) 
    2 => 
    object(stdClass)[33] 
     public 'id' => string '3' (length=1) 
     public 'user_id' => string '2' (length=1) 
     public 'title' => string 'Test Title' (length=10) 
     public 'category' => string '2' (length=1) 
     public 'date_submitted' => string '2014-10-12 01:19:34' (length=19) 
    3 => 
    object(stdClass)[34] 
     public 'id' => string '4' (length=1) 
     public 'user_id' => string '2' (length=1) 
     public 'title' => string 'Test Title' (length=10) 
     public 'category' => string '3' (length=1) 
     public 'date_submitted' => string '2014-10-12 02:54:57' (length=19) 
    4 => 
    object(stdClass)[35] 
     public 'id' => string '8' (length=1) 
     public 'user_id' => string '2' (length=1) 
     public 'title' => string 'test' (length=4) 
     public 'category' => string '3' (length=1) 
     public 'date_submitted' => string '2014-11-13 16:49:06' (length=19) 
    5 => 
    object(stdClass)[36] 
     public 'id' => string '9' (length=1) 
     public 'user_id' => string '2' (length=1) 
     public 'title' => string 'Hello World' (length=11) 
     public 'category' => string '3' (length=1) 
     public 'date_submitted' => string '2014-12-06 22:15:46' (length=19) 
    6 => 
    object(stdClass)[37] 
     public 'id' => string '5' (length=1) 
     public 'user_id' => string '2' (length=1) 
     public 'title' => string 'My first blog' (length=13) 
     public 'category' => string '2' (length=1) 
     public 'date_submitted' => string '2014-10-12 21:26:13' (length=19) 

최초의 6 행은 첫 번째 테이블에서하고 마지막 행은 2 테이블에서입니다 다음과 같은 출력을 제공 내 코드

$this->db->select("*"); 
    $this->db->from("artwork"); 
    $this->db->get(); 
    $query1 = $this->db->last_query(); 

    $this->db->select("*"); 
    $this->db->from("blog"); 
    $this->db->get(); 
    $query2 = $this->db->last_query(); 

    $results = $this->db->query($query1." UNION ".$query2); 

    function cmp($a, $b) 
    { 
     if ($a->date_submitted == $b->date_submitted) { 
      return 0; 
     } 
     return ($a->date_submitted < $b->date_submitted) ? -1 : 1; 
    } 
    usort($results->result(), "cmp"); 
    var_dump($results->result()); 

입니다.

+2

SQL 쿼리에서 왜 주문하지 않습니까? '$ results = $ this-> db-> query ($ query1. "UNION". $ query2. "ORDER BY'date_dubmitted'");' – Tosfera

+0

고마워요. 그게 효과가 있었어. –

+0

내 답변을 실제 답변으로 표시하여 사람들이 이와 같은 문제에 더 얽매여 있다면 더 이상 주석 달기 또는 검색을 중지합니다. :) – Tosfera

답변

0

합니다. SQL에서 'Order By'속성을 쿼리에 추가하면됩니다.

$results = $this->db->query($query1." UNION ".$query2 ." ORDER BY date_dubmitted") 
0

먼저 유닉스 타임 스탬프 날짜 시간 문자열로 변환하고 비교해야한다 : 의견을 읽고하지 않는 사람들을 위해

function cmp($a, $b) 
    { 
     $firstTimeStamp = strtotime($a->date_submitted); 
     $secondTimeStamp = strtotime($b->date_submitted); 

     if ($firstTimeStamp == $secondTimeStamp) { 
      return 0; 
     } 

     return ($firstTimeStamp < $secondTimeStamp) ? -1 : 1; 
    } 
+0

나는이 방법을 시도했지만 그것은 여전히 ​​작동하지 않습니다. –