sql >> Base de Datos >  >> RDS >> Mysql

Seleccione una fila junto con sus filas siguiente y anterior

Esto es complicado, porque está seleccionando una fila por id , pero eligiendo los adyacentes por otro campo, modified_time .

La idea es usar variables para enumerar las filas. Y use otra fila para calcular el valor del id que te importa Haga esto en una subconsulta y luego seleccione las filas que desee:

SELECT t.*
FROM (SELECT `id`,
              @rn := if(@rnid := if(t.id  = '".id."', @rn + 1, @rnid),
                        @rn + 1, @rn + 1
                       ) as rn
      FROM {#table} t       
           "other_part_of_query" cross join
           (select @rn := 0, @rnid := 0) vars
      ORDER BY `modified_time` DESC
     ) t
WHERE rn in (@rnid - 1, @rnid, @rn)