![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как составить запрос который бы возвратил три записи: [Firebird 1.5, 2.0]
zorik © (2006-09-11 17:38:00)1-я предыдущая перед второй
2-я где id равно заданому значению
3-я после второй
Например:
id | name
----+------
23 | b
1 | a
54 | d
3 | f
100 | e
12 | c
select * from table order by name
1 a
23 b
12 c
54 d
100 e
3 f
Задаем параметр id=12 нужно получить:
23 b
12 c
54 d
id=100:
54 d
100 e
3 f
и т.д.
atruhin (2006-09-11 18:38:00) [1]Не знаю как ОРАКЛ но FB будет вычислять вложенные запросы отдельно, поэтому хранимкой эффективней.
> Хранимкой, думаю смогу. Но получится ли запустить ее в php
> пока не знаю.
Запрос из хранимки ни чем не отличается от запроса из таблицы, так что php тут не при чем.
ANB (2006-09-11 18:25:00) [2]WITH t AS
(
SELECT 23 ID, 'b' NAME
FROM DUAL
UNION ALL
SELECT 1, 'a'
FROM DUAL
UNION ALL
SELECT 54, 'd'
FROM DUAL
UNION ALL
SELECT 3, 'f'
FROM DUAL
UNION ALL
SELECT 100, 'e'
FROM DUAL
UNION ALL
SELECT 12, 'c'
FROM DUAL)
SELECT *
FROM t
WHERE NAME = (SELECT MAX (NAME)
FROM t
WHERE NAME < (SELECT NAME
FROM t
WHERE ID = :ID))
UNION ALL
SELECT *
FROM t
WHERE ID = :ID
UNION ALL
SELECT *
FROM t
WHERE NAME = (SELECT MIN (NAME)
FROM t
WHERE NAME > (SELECT NAME
FROM t
WHERE ID = :ID))
Эта. with только в оракле прокатит, посему надо будет t заменить на имя таблицы.
zorik (2006-09-11 18:02:00) [3]Хранимкой, думаю смогу. Но получится ли запустить ее в php пока не знаю. Буду пробовать
zorik (2006-09-11 18:00:00) [4]name -> unique, id - primary key
atruhin (2006-09-11 17:55:00) [5]А если перед заданной, несколько записей с одинаковым name, какую выводить?
Вообще запрос составить можно, но эффективнее будет решить хранимкой.
zorik (2006-09-11 17:55:00) [6]Типа этого:
1 a
1 a
23 b
Обясняю. Это структура для веба. Навигация по записям
Desdechado (2006-09-11 17:48:00) [7]а для кода 1 чего?