Я хочу выбрать несколько строк на основе определенных критериев, а затем взять одну запись из этого набора и 5 строк перед ней и после нее.
Теперь я могу сделать это численно, если в таблице есть первичный ключ (например, первичные ключи, число которых меньше 5, чем целевая строка строки и 5 больше, чем целевой ключ строки).
Итак, выберите строку с первичным ключом 7 и соседними строками:
select primary_key from table where primary_key > (7-5) order by primary_key limit 11;
2
3
4
5
6
-=7=-
8
9
10
11
12
Но если я сначала выберу только определенные строки, я потеряю этот числовой метод использования первичных ключей (и это предполагало, что у ключей не было никаких пробелов в их порядке), и нужен другой способ получить ближайший строк до и после определенной целевой строки.
Вывод первичного ключа такого выбора может выглядеть более случайным и, следовательно, менее восприимчивым к математическому размещению (поскольку некоторые результаты будут отфильтрованы, например, с помощью where active=1
):
select primary_key from table where primary_key > (34-5)
order by primary_key where active=1 limit 11;
30
-=34=-
80
83
100
113
125
126
127
128
129
Обратите внимание, что из-за пробелов в первичных ключах, вызванных примером, где условие (например, becaseu есть много неактивных элементов), я больше не получаю ближайшие 5 выше и 5 ниже, вместо этого я получаю ближайший 1 ниже и ближайший 9 выше.