Я делаю выборку одной строки по определенному параметру:
SELECT * FROM `table` WHERE `number`='3'
number - поле с индивидуальным цифровым значением(одинаковых в таблице нет).
Как выбрать вместе с этой строкой предыдущую и следующую строки?
Другие языки программирования и технологии
Помогите сделать выборку из базы mysql
Видать мой предыдущий ответ, прошел мимо вашего сознания.
SELECT * FROM `table` WHERE `number` IN (2,3,4)
SELECT * FROM `table` WHERE `number` IN (2,3,4)
не совсем понятно что подразумевается под предыдущей и следующей строкой? строки в которых number будет равен 2 и 4?
пи эс.
нельзя с уверенностью сказать что данные в таблице хранятся в каком-то упорядоченном виде?
пи эс.
нельзя с уверенностью сказать что данные в таблице хранятся в каком-то упорядоченном виде?
Синтаксис 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
так было бы вообще красиво :)
апострофы расставьте, где надо.
Вариант 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
так было бы вообще красиво :)
апострофы расставьте, где надо.
Никак. Понятия "предыдущий", "следующий" в 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)
В этом случае можно обойтись 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)
Похожие вопросы
- Помогите сделать базу данных
- Люди, знающие SQL, помогите сделать запрос.
- у кого есть FineReader , помогите сделать из картинки текст
- Формула в excel. Помогите сделать формулу.
- Помогите сделать задачу по Web-програмированию, пополню счет на моб. за это!!!!
- Помогите сделать сайт на HTML Не получается сделать сайт на HTML,помогите сделать тема тяжёлая атлетика
- Помогите нарисовть логотип Помогите сделать логотип, БЕСПЛАТНО.
- помогите сделать задание в Microsoft Visual Studio
- Помогите сделать задачу на C++.
- Помогите пожалуйста написать программу на языке программирования AssemblerКто первый поможет сделать правильно10балов+50