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
Post a Comment