sql - MySQL query - Before and after rows of a custom ordered results -


i've seen other questions similar in stackoverflow, of them based in auto-increment id, don't have that.

i have query like:

  select field_a,           field_b      table    field_m = '100'       , field_n = '200' order field_x 

that results in this

field_a    field_b ------------------- john       12      marty      7      peter      2      carl       9      mark       11      bob        10      neil       1      louis      14      

so, want complete original query , 1 query take record before , after 1 of them ... let's "carl", it's important in each case different, mean, other times need before , after of "bob" ...

so, let's "carl" ... need create sql query in use order field_x described , , take before , after rows when field_a='carl'

it rather heavy on big tables, can use ranking , join twice have previous , next record , use filter it.

set @rank_prev = 0; set @rank_cur = 0;  set @rank_next = 0; select     prev.field_a prev_a,     prev.field_b prev_b,     next.field_a next_a,     next.field_b next_b  (     select       @rank_cur:=@rank_cur+1 rank,       field_a,        field_b     dd   field_m = '100'      , field_n = '200'   order field_x  ) cur inner join  (   select       @rank_prev:=@rank_prev+1 rank,       field_a,        field_b     dd   field_m = '100'      , field_n = '200'   order field_x  ) prev  on prev.rank + 1 = cur.rank inner join  (   select       @rank_next:=@rank_next+1 rank,       field_a,        field_b     dd   field_m = '100'      , field_n = '200'   order field_x  ) next  on cur.rank+1 = next.rank  cur.field_a = 'carl'; 

works on mysql


Comments

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -