2012-03-19 2 views
0

내가 아래와 같이 setselect 방법에 정의 된 별명 필드를 정렬하는 것을 시도하고있다,하지만 관련이없는 기록을 반환, 중첩 된 IF 조건에서스핑크스 SetSelect sortmode 문제

SetSelect 스핑크스 쿼리

$sphinxObj->SetSelect("*, IF(CityId>2 AND CityId<10,1,IF(CityId>12 AND CityId<20,2,IF(CityId>22 AND CityId<30,3,IF(CityId>33 AND CityId<40,4,0)))) as Rank"); 
아래

있습니다 필드를 정렬 할 수없는 순위 값 (ASC 또는 DESC).

Rank: 4 
Rank: 4 
Rank: 4 
Rank: 2 
Rank: 4 
Rank: 2 
Rank: 10 
Rank: 5 
Rank: 2 
Rank: 2 
Rank: 3 
Rank: 1 
Rank: 4 
Rank: 4 
Rank: 3 
Rank: 2 
Rank: 10 
Rank: 10 
Rank: 10 
Rank: 10 

나는 $sphinxObj->SetSortMode(SPH_SORT_ATTR_ASC, "Rank"); 위해 노력하지만 관련이없는 기록을 던지고있다. 이것에 대한 제안과 SetSelect 별칭 필드에 정의 된 값을 어떻게 정렬합니까?

답변

1

지금 Rank은 정의 된 속성이 아니므로 SPH_SORT_ATTR_ASC을 사용할 수 없습니다.

식을 기준으로 정렬하려면 SPH_SORT_EXPR instead을 사용하십시오.

+0

오케이. 하지만 SPH_SORT_EXPR을 사용하면 ASC 또는 DESC 값을 정렬 할 수 있습니까? – Raja

+0

@Yadheendran : 당신이 원하는대로. 그것은 당신의 표현이고, 당신은 공식화하고, 당신은 통제 할 수 있습니다. ASC 나 DESC는 단지 관점의 문제로 간주합니다. 1 ~ 10 또는 -10 ~ -1, 예 : 오름차순으로 필요하면 -1로 곱하십시오. – hakre

0

'순위'는 @weight의 내부 알래스입니다.

새 속성에 다른 이름을 사용하는 것이 좋습니다.

도 $ sphinxObj-> setRankingMode (SPH_RANK_NONE)을 설정해야합니다. 내부 순위를 사용 중지합니다.