@anton1x

Из-за чего меняется результат выборки при проставлении индекса MySQL?

Есть таблица со столбцами id, sort причем sort может идти не по порядку. Есть немного замороченный запрос для перемещения строчки на любую позицию и сдвигом значений сорт у предыдущего/следующего элемента:

SET @start=37;
UPDATE tablename m INNER JOIN (SELECT @start AS oldsort, (@start:=testsort.sort) AS newsort from tablename AS testsort WHERE testsort.sort BETWEEN @start AND 39 ORDER BY testsort.sort DESC ) p ON m.sort = p.oldsort SET m.sort = newsort WHERE sort<=39 AND sort>37;
UPDATE tablename SET sort=39 WHERE id={ид_перемещаемого элемента}


В этом примере перемещаем 37 элемент на позицию 39го, соответственно у sort=38, новый sort становится равным 37, а у sort=39, новый sort станет равным 38.

Запрос вполне корректно работает, но после простановки индекса на поле sort, ломается, и не затрагивает ни одной строки! С чем это может быть связано? Буду очень признателен любым подсказкам в решении данного вопроса...
  • Вопрос задан
  • 385 просмотров
Решения вопроса 1
@cd2005
php разработчик
Я не знаю почему срабатывает без индекса, но знаю почему не срабатывает для поля с индексом
SELECT @start AS oldsort, (@start:=testsort.sort) AS newsort from tablename AS testsort WHERE testsort.sort BETWEEN @start AND 39 ORDER BY testsort.sort DESC

При сравнении BETWEEN на первую строку попадает условие BETWEEN 37 AND 39, а на вторую BETWEEN 39 AND 39. И соответственно ничего не подпадает под это условие.

То есть что бы все срабатывало нужно BETWEEN 37 AND 39 или BETWEEN 37 AND @start
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы