Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, помогите решить задачу. Есть база, из которой выводятся значения по id. как найти предыдущую и последующую запись?
Упрощенный вид запроса:
Неактивен
Задача неоднозначна, если tbl.marck неуникальный индекс.
Неактивен
после ORDER BY может быть не только marck но и другой столбец. Если можно было бы узнать номер по порядку строки с выбранным id? можно было бы сделать это с помощью LIMIT строка с id-1 строка с id+1. Но как? Может есть еще решение?
Неактивен
Вы запросом SELECT получаете все колонки строки. Потом формируете второй запрос, уже зная значения marck и других колонок, по которым идет сортировка.
Неактивен
А мне одному кажется, что задача тривиально сводится к LIMIT 2 и ответом «предыдущей
строки нет вследствие LIMIT, вторая строка будет «следующей»?
Неактивен
paulus написал:
А мне одному кажется, что задача тривиально сводится к LIMIT 2 и ответом «предыдущей
строки нет вследствие LIMIT, вторая строка будет «следующей»?
Автор хочет выбрать строку с другим id, а в данном запросе id фиксирован условием. Из-за этого и сложность.
Неактивен
paulus написал:
А мне одному кажется, что задача тривиально сводится к LIMIT 2 и ответом «предыдущей
строки нет вследствие LIMIT, вторая строка будет «следующей»?
LIMIT 2 и больше не даст результата т.к tbl.id = ... а оно уникальное. С виду простая задача, а решения придумать не могу.
Неактивен
Вот так (для примера одним запросом):
Отредактированно Scaint (27.07.2010 15:16:53)
Неактивен
Спасибо за ответ, но этот способ не сработает т.к. при сортировки id тоже перемешиваются и сказать, что оно больше или меньше 10 нельзя.
Похоже что без перебора всех записей эта проблема не решается - но это делать глупо.
Неактивен
Хм, Вы до сих пор не решили задачку? RGBeast же написал решение:
1. SELECT marck FROM tablename WHERE id = 10;
2. SELECT * FROM tablename WHERE marck > :полученное_значение: ORDER BY marck LIMIT 1;
3. SELECT * FROM tablename WHERE marck < :полученное_значение: ORDER BY marck DESC LIMIT 1;
Неактивен
Да, точно затупил
Все оказалось намного проще. Спасибо.
Неактивен