Проблема с режимом сортировки Sphinx SetSelect

я пытался отсортировать поле псевдонима, определенное в методе setselect, как показано ниже, но оно возвращает нерелевантные записи,

Запрос SetSelect sphinx во вложенном условии IF

$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?


person Raja    schedule 19.03.2012    source источник


Ответы (2)


Сейчас Rank не является определенным атрибутом, поэтому вы не можете использовать SPH_SORT_ATTR_ASC.

Если вы хотите выполнить сортировку на основе выражений, используйте вместо этого SPH_SORT_EXPR.

person hakre    schedule 19.03.2012
comment
Хорошо. Но с помощью SPH_SORT_EXPR можем ли мы отсортировать значения ASC или DESC? - person Raja; 19.03.2012
comment
@Yadheendran: Это и все, что вы хотите. Это ваше выражение, вы его формулируете, вы все контролируете. ASC или DESC оценивают это просто как вопрос точки зрения, например. либо от 1 до 10, либо от -10 до -1, например. умножьте его на -1, если вам нужно по возрастанию. - person hakre; 19.03.2012

'rank' - это внутренний alais @weight.

Я предлагаю использовать другое имя для вашего нового атрибута.

также следует установить $sphinxObj->setRankingMode(SPH_RANK_NONE); чтобы отключить внутренний рейтинг.

person barryhunter    schedule 19.03.2012