Другие языки программирования и технологии

Помогите сделать выборку из базы mysql

Я делаю выборку одной строки по определенному параметру:

SELECT * FROM `table` WHERE `number`='3'

number - поле с индивидуальным цифровым значением(одинаковых в таблице нет).

Как выбрать вместе с этой строкой предыдущую и следующую строки?
Видать мой предыдущий ответ, прошел мимо вашего сознания.
SELECT * FROM `table` WHERE `number` IN (2,3,4)
РМ
Руслан Мавлонов
13 767
Лучший ответ
не совсем понятно что подразумевается под предыдущей и следующей строкой? строки в которых number будет равен 2 и 4?

пи эс.
нельзя с уверенностью сказать что данные в таблице хранятся в каком-то упорядоченном виде?
Б А
Б А
52 039
Синтаксис mysql знаю не очень хорошо, поэтому это проверять надо.. .
Вариант 1.
select * from table T1 where number=3 OR
(number<3 and not exists (select * from table T2 where T2.number>T1.number))
OR (number>3 and not exists (select * from table T2 where T2.number<t1.number))>3))
(равно 3 или меньше 3 и не существует большего значения или больше трех и не существует значения меньше)
Вариант 2
select * from table T1 where number=3 OR
number = (select max(number) from table where number<3)
OR number = (select min(number) from table where number>3)

Вариант 3 (сомнительный) В документации mysql сказано, что параметр offset в предложении limit - целое число. Если это так, то можно вообще написать:

select * from table where number >=3 order by number ASC limit -1,3

так было бы вообще красиво :)

апострофы расставьте, где надо.
Винер Шакиров
Винер Шакиров
91 533
Никак. Понятия "предыдущий", "следующий" в MySQL нет. Так можно говорить только в контексте сортировки по какому то полю, например по `number`.
В этом случае можно обойтись 2мя запросами:

1) "предыдущая" запись
SELECT * FROM `table` WHERE `number`<'3' ORDER BY `number` DESC LIMIT 1
2) "искомая" и "следующая" записи:
SELECT * FROM `table` WHERE `number`>='3' ORDER BY `number` ASC LIMIT 2

Можно объединить эти 2 набора оператором UNION, но с точки зрения СУБД это всё-равно будут 2 независимых запроса

(SELECT * FROM `table` WHERE `number`<'3' ORDER BY `number` DESC LIMIT 1)
UNION ALL
(SELECT * FROM `table` WHERE `number`>='3' ORDER BY `number` ASC LIMIT 2)
Михаил Балуев
Михаил Балуев
5 305