Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecione uma linha junto com as linhas seguinte e anterior


Isso é complicado, porque você está selecionando uma linha por id , mas escolhendo os adjacentes por outro campo, modified_time .

A ideia é usar variáveis ​​para enumerar as linhas. E use outra linha para calcular o valor do id que você se importa. Faça isso em uma subconsulta e selecione as linhas desejadas:
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)