sql >> Database >  >> RDS >> Mysql

MySQL:selecteer 5 rijen voor en na een specifieke rij

union all gebruiken en subquery's om de records te beperken zouden het moeten doen:

select * from  users where id = 5
union all (
  select * from users 
  where score <  (select score from users where id = 5) 
  order by score desc limit 2
) 
union all (
  select * from users 
  where score > (select score from users where id = 5) 
  order by score asc limit 2
) 
order by score

Voorbeeld SQL-fiddle

Bewerken:ik denk dat een betere methode is om de rijen te nummeren op basis van score en vervolgens de rijen met nummer -2 en +2 te selecteren uit de rijen van id 5:

select id, name, score 
from (select 
      t.*, @rownum1 := @rownum1 + 1 as rank
      from users t, (select @rownum1 := 0) r
      order by score
     ) a,
     (select rank from (
        select t.*, 
        @rownum := @rownum + 1 as rank
        from users t, (select @rownum := 0) r
        order by score
     ) t
      where id = 5
   ) b
where b.rank between a.rank -2 and a.rank+2
order by score;    

Voorbeeld SQL-fiddle



  1. Een MySQL JSON-kolom toewijzen aan een Java-entiteitseigenschap met behulp van JPA en Hibernate

  2. Geen unieke of uitsluitingsbeperking die overeenkomt met ON CONFLICT

  3. Rij bijwerken met gegevens uit een andere rij in dezelfde tabel

  4. PHP &MySQL:mysqli_num_rows() verwacht dat parameter 1 mysqli_result is, boolean gegeven