2012-10-22 4 views
1

최근에 스핑크스에서 내 데이터를 정렬하는 필터를 만들기 시작했는데 문제는 - 흥미로운 CI 버그 (?)를 만났습니다. CI가 단순히 자체적으로 결과를 정렬하기 때문에 어떤 순서로든 내 WHERE 속성을 전달하는 것은 중요하지 않습니다.왜 '어디서'attrs의 순서가 중요하지 않습니까?

왜 이러한 쿼리가 모두 동일한 이전 결과를 반환하고 이것이 어떻게 수정 될 수 있습니까?

$a = $this->db->from('table') 
       ->where('id', 1) 
       ->or_where('id', 2) 
       ->get()->result(); 

$b = $this->db->from('table') 
       ->where('id', 2) 
       ->or_where('id', 1) 
       ->get()->result(); 

if ($a == $b) echo 'Equal'; 
+0

foreach ($ a as $ a1)와 foreach ($ b as $ b1)를 만들려고 했습니까? 동일한 결과입니까? –

+0

글쎄,이 코드는 'Equal'을 출력 할 것이므로 동일해야합니다. – MJA

+0

아주 간단한 질문입니다. 귀하의 질문에 주문 하시겠습니까? 나는 보지 않기 때문에. 그리고 거기에 없으면 쿼리는 기본적으로 정렬됩니다. 말이된다? – itachi

답변

2

생성 된 sql 쿼리는 동일한 결과 집합을 생성하므로 개체 집합이 동일합니다. 이것은 CI와는 아무런 관련이 없습니다. 대부분의 sql dbs는 where 명령 매개 변수를 부모 명령 또는 작업 순서 순서 제외로 지정하지 않고 where 매개 변수를 가장 효율적으로 실행할 수 있도록 최적화합니다.

결과 집합의 순서를 SQL DB에서 변경하려면 주문을 사용해야합니다.

+0

당신은 무엇을 제안 하시겠습니까? 코드에서 게시물 정렬을 수행해야합니까? 그것은 내 자원을 먹을거야,하지만 어떻게 다른 방법을 볼 수 없습니다. – MJA

+0

@@@@@@@@@@@@@@@@@ 아니오, CI orm 라이브러리의 기능별 정렬을 사용하여 정렬하십시오. 그것은 귀하의 코드가 아니라 쿼리에서 수행됩니다. – Ray

0

직접 결과를 주문하십시오. 뭔가처럼 : 그것은 CI에서 그런 식으로 (나는 익숙하지 않다) 작동하는지

order_by("id=1", "desc"); 

나는 익숙하지 해요,하지만 순수 MySQL의에서 order by id=1 DESC이 작동합니다.

관련 문제