Есть запрос, выводимый на постраничном гриде, управляемый limit. При добавлении новой строки в таблицу, участвующей в запросе нужно отобразить список в данной таблице, начиная с новой записи. Запись я могу идентифицировать по уникальному идентификатору. Мне нужно найти значения start, end (limit start, end) где в диапазоне end-start будет находится искомая строка.
Ответ
@KiTE дал вам правильный ответ, как это сделать средствами SQL. Но, вообще говоря, доступ к индексам MySQL на низком уровне есть, и давно уже. Правда, мало когда нужно им пользоваться. Подробности читать на MySQL Handler Syntax А вот пример. Я создал такую таблицу: mysql> SELECT * FROM test; +---+---------+ | a | b | +---+---------+ | 1 | alpha | | 2 | bravo | | 3 | charlie | | 4 | delta | | 5 | echo | | 6 | foxtrot | +---+---------+ По полю b создал индекс, тоже с именем b Теперь открываем хандлер: mysql> HANDLER test OPEN; И читаем напрямую. Внимание, здесь и далее b — это имя индекса, а не поля (блин, надо было по-другому обозвать). Ищем нужную запись: mysql> HANDLER test READ b = ('delta'); +---+-------+ | a | b | +---+-------+ | 4 | delta | +---+-------+ Читаем две записи перед ней, в порядке индекса: mysql> HANDLER test READ b PREV LIMIT 2; +---+---------+ | a | b | +---+---------+ | 3 | charlie | | 2 | bravo | +---+---------+ Курсор (позиция чтения), кстати, сместился. Мы теперь не на 'delta', а на 'bravo'. Читаем следующие четыре записи: mysql> HANDLER test READ b NEXT LIMIT 4; +---+---------+ | a | b | +---+---------+ | 3 | charlie | | 4 | delta | | 5 | echo | | 6 | foxtrot | +---+---------+ Поигрались, и хватит: mysql> HANDLER test CLOSE; Вот такой механизм. Можно использовать сравнения, можно WHERE. Работает заметно быстрее, чем SELECT.
Комментариев нет:
Отправить комментарий