Я хочу выбрать несколько строк на основе определенных критериев, а затем взять одну запись из этого набора и 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
Обратите внимание, что из-за пробелов в первичных ключах, вызванных примером, в котором условие ( например, потому что есть много неактивных элементов ), я больше не получаю самые близкие 5 выше и 5 ниже, вместо этого я получаю самое близкое 1 ниже и самое близкое 9 выше.