Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez une ligne avec ses lignes suivantes et précédentes

C'est compliqué, car vous sélectionnez une ligne par id , mais en choisissant les adjacentes par un autre champ, modified_time .

L'idée est d'utiliser des variables pour énumérer les lignes. Et, utilisez une autre ligne pour calculer la valeur de id qui vous tient à cœur. Faites cela dans une sous-requête, puis sélectionnez les lignes souhaitées :

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)