Поле сортировки разное, но и это неважно, потому что, как я выше писал, игнорируется любой массив сортировки, что по NAME, что по SORT. У Вас какая версия Битрикс? Мб, не последняя и раньше это действительно работало?
Покопался в "кишках". Битрикс сначала делает запрос на "ранг", потом еще одним запросом берет элемент с соседним. За получения ранга записи с id 225 отвечает следующий запрос:
Код
SELECT @rank:=el1.rank
FROM (
SELECT @rank:=@rank+1 AS rank, el0.*
FROM (
SELECT BE.ID as ID,BE.SORT as SORT
FROM
b_iblock B
INNER JOIN b_lang L ON B.LID=L.LID
INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
WHERE 1=1
AND (
((((BE.IBLOCK_ID = '3'))))
AND ((((BE.ACTIVE='Y'))))
)
AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))
ORDER BY BE.SORT asc
) el0
) el1
WHERE el1.ID = 225
Который возвращает "1" в качестве ранга, что в корне неверно. Что тут не работает? Какие-то настройки в mysql должны быть особые?
Вот такой костыль помог, перенес сортировку из внутренней квери во внешнюю, пришлось убрать дополнительно "BE." из ORDER BY. Надо сообщить в Битркис, сортировка внутренних кверей не должна использоваться.
Код
$DB->Query("SET @rank=0");
// $DB->Query("
// SELECT @rank:=el1.rank
// FROM (
// SELECT @rank:=@rank+1 AS rank, el0.*
// FROM (
// SELECT ".$sSelect.$strSql.$sOrderBy."
// ) el0
// ) el1
// WHERE el1.ID = ".$nElementID."
// ");
$DB->Query("
SELECT @rank:=el1.rank
FROM (
SELECT @rank:=@rank+1 AS rank, el0.*
FROM (
SELECT ".$sSelect.$strSql."
) el0 " . str_replace('BE.', '', $sOrderBy) . "
) el1
WHERE el1.ID = ".$nElementID."
");
$DB->Query("SET @rank2=0");
// $res = $DB->Query("
// SELECT *
// FROM (
// SELECT @rank2:=@rank2+1 AS RANK, el0.*
// FROM (
// SELECT ".$sSelect.$strSql.$sOrderBy."
// ) el0
// ) el1
// WHERE el1.RANK between @rank-$nPageSize and @rank+$nPageSize
// ");
$res = $DB->Query("
SELECT *
FROM (
SELECT @rank2:=@rank2+1 AS RANK, el0.*
FROM (
SELECT ".$sSelect.$strSql."
) el0 " . str_replace('BE.', '', $sOrderBy) . "
) el1
WHERE el1.RANK between @rank-$nPageSize and @rank+$nPageSize
");
Из общения с тех.поддержкой выяснилось, что проблема в настройках mysql. Судя по тому, что на bitrixlabs.ru сортировка работает правильно можно предположить, что так оно и есть, но проверка сайта проблем не диагностирует и это действительно странно.