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

MySQL:ordene la consulta y muestre una fila aleatoria en la parte superior

Usa order by . Aquí hay un método:

select t.*
from (select t.*, (@rn := @rn + 1) as seqnum
      from tickets t cross join
           (select @rn := 0) params
      order by vip desc, rand()
     ) t
order by (seqnum = 1) desc, price asc;

Esto usa la subconsulta para identificar la fila que se debe mantener en la parte superior. Luego usa esta información para ordenar en la consulta externa.

Si sus filas tienen un identificador único, también podría hacer:

select t.*
from tickets t cross join
     (select id from tickets where vip = 1 order by rand() limit 1) as t1
order by (t.id = t1.id) desc, price asc;