Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как вернуть две верхние и две нижние строчки / 13 сообщений из 13, страница 1 из 1
27.12.2013, 00:08:28
    #38513707
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
Код: sql
1.
select id, tag from t where tag like '%qpsd%'



допустим нам этот результат вернет записи с такими номерами

3
12
45
89
90

Как можно изменить этот запрос так, чтобы в добавок к этой выдаче, используя её как опорные точки, добавились бы две "верхние" и две "нижние" строчки соответственно, то есть итоговый результат хочется такой

1
2
3
4
5
10
11
12
13
14
43
44
45
46
47
87
88
89
90
91
92
...
Рейтинг: 0 / 0
27.12.2013, 00:30:12
    #38513716
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
Код: sql
1.
2.
3.
4.
5.
6.
7.
select t.*
from

(select t.id+d.num as id
from t, (select -2 as num union all select -1 union all select 0 union all select 1 union all select 2) d) a

inner join t on a.id=t.id
...
Рейтинг: 0 / 0
27.12.2013, 00:32:20
    #38513718
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
даа, это ж ещё нужно
qwerty112
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select t.*
from

(select t.id+d.num as id
from t, (select -2 as num union all select -1 union all select 0 union all select 1 union all select 2) d
where t.tag like '%qpsd%') a

inner join t on a.id=t.id
...
Рейтинг: 0 / 0
27.12.2013, 01:23:48
    #38513753
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
qwerty112,

наверно еше дистинкт надо
...
Рейтинг: 0 / 0
27.12.2013, 07:04:10
    #38513804
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
Lumix,

id имеют пропуски?
...
Рейтинг: 0 / 0
27.12.2013, 11:48:05
    #38514035
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
miksoftLumix,

id имеют пропуски?

Спасибо, что обратили на это внимание.

Я подумал и пришел к выводу, что да, такое может быть. То есть не всегда удаление той или иной записи требует переиндексации всей базы.
...
Рейтинг: 0 / 0
27.12.2013, 11:50:55
    #38514037
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
LumixmiksoftLumix,

id имеют пропуски?

Спасибо, что обратили на это внимание.

Я подумал и пришел к выводу, что да, такое может быть. То есть не всегда удаление той или иной записи требует переиндексации всей базы.А если нужная запись пропущена, то ее нужно тоже пропускать в результате запроса или брать следующую?
...
Рейтинг: 0 / 0
27.12.2013, 12:48:46
    #38514127
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
miksoftLumixпропущено...


Спасибо, что обратили на это внимание.

Я подумал и пришел к выводу, что да, такое может быть. То есть не всегда удаление той или иной записи требует переиндексации всей базы.А если нужная запись пропущена, то ее нужно тоже пропускать в результате запроса или брать следующую?

В итоговом результате всегда вокруг опорной точки должно быть добавлено две снизу и две сверху, то есть ответ на ваш вопрос - брать следующую.

Единственное, где это правило нарушается, это когда опорные точки сами идут друг за другом, например

89
90

в этом случае 89 является первой добавочной строчкой снизу для 90, а 90 является первой добавочной строчкой сверху для 89

если в базе нет строчек 88 и 91, а остальные есть, тогда итоговый результат для этих двух опорных точек такой

86
87
89
90
92
93
...
Рейтинг: 0 / 0
27.12.2013, 17:55:52
    #38514567
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
javajdbcqwerty112,

наверно еше дистинкт надо
даа, конечно ))
что могут быть соседнии (89, 90) и не подумал ...
...
Рейтинг: 0 / 0
27.12.2013, 18:09:24
    #38514587
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
Lumixmiksoftпропущено...
А если нужная запись пропущена, то ее нужно тоже пропускать в результате запроса или брать следующую?

В итоговом результате всегда вокруг опорной точки должно быть добавлено две снизу и две сверху, то есть ответ на ваш вопрос - брать следующую.

Единственное, где это правило нарушается, это когда опорные точки сами идут друг за другом, например

89
90

в этом случае 89 является первой добавочной строчкой снизу для 90, а 90 является первой добавочной строчкой сверху для 89

если в базе нет строчек 88 и 91, а остальные есть, тогда итоговый результат для этих двух опорных точек такой

86
87
89
90
92
93
что-то типа такого, вроде должно "работать" (непроверял)
Код: sql
1.
2.
3.
4.
select distinct t.*
from 
(select id from t where tag like '%qpsd%') a, t
where (select count(*) from t t1 where t1.id between a.id and t.id)<=3


но "тяжёлый" запрос будет ...

имхо, правильнее будет пронумеровать таблицу t (возможно, через времянку) и потом, итоговый запрос, по первому варианту
...
Рейтинг: 0 / 0
28.12.2013, 00:32:47
    #38514847
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
Спасибо!
...
Рейтинг: 0 / 0
28.12.2013, 22:48:11
    #38515171
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
Вероятно, тот редкий случай, когда оправдан фулл-скан курсор...

В буфер 2 строки до искомой, смещать верхнюю границу, если в двух следующих записях встретится очередная искомая
...
Рейтинг: 0 / 0
29.12.2013, 05:14:05
    #38515247
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть две верхние и две нижние строчки
Cygapb-007Вероятно, тот редкий случай, когда оправдан фулл-скан курсор...

В буфер 2 строки до искомой, смещать верхнюю границу, если в двух следующих записях встретится очередная искомая

вот честно лень оконную функцию делать
ана переменных (статейка где-то была, хотя и так понятно).
Кучу переменных держать.
Да и 100 раз проше действительно на обычном процедырном
курсоре -- покрайне мере в 100 раз понятнее.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как вернуть две верхние и две нижние строчки / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]