Mysql
 sql >> Database >  >> RDS >> Mysql

Seleziona una riga insieme alle righe successive e precedenti

Questo è complicato, perché stai selezionando una riga per id , ma scegliendo quelli adiacenti con un altro campo, modified_time .

L'idea è di usare le variabili per enumerare le righe. E usa un'altra riga per calcolare il valore per l'id a cui tieni. Esegui questa operazione in una sottoquery, quindi seleziona le righe desiderate:

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)