Obtenga los resultados de mysql, luego aleatorice el orden de los resultados, luego muestre uno diferente del resto

Tengo una consulta que obtiene 6 resultados, luego quiero aleatorizar esos 6 resultados para que cada vez que la persona vuelva a cargar la página, se aleatoricen en orden.

De esos 6 resultados, quiero mostrar uno en un cuadro separado de los demás, ¿cómo haría esto?

Esto es lo que estaba pensando, obtener resultados, usar shuffle() en la matriz, luego en el cuadro separado que hago echo array[0]['info'], luego el resto hago un $i = 2; while($i <= 6); y echo array[$i]['info'];

¿Qué piensas? ¿Hay una mejor manera?

Necesito que esta función sea lo más eficiente posible, por lo que se agradece cualquier consejo. ¿Consultas separadas tal vez?

preguntado el 04 de julio de 12 a las 07:07

Sí, busco los últimos 6 resultados, luego aleatorizo ​​los 6 para mostrar la salida. Esto es lo que encontré y siento que voy a hacer. ¿Estás de acuerdo con esta elección? stackoverflow.com/questions/5201967/… -

3 Respuestas

Puede obtener los resultados en orden aleatorio desde MySQL en lugar de aleatorizarlos en PHP.

SELECT * FROM `table` ORDER BY RAND() LIMIT 6;

Vea también RAND () (las notas de abajo)

Edit:

Para aleatorizar solo las últimas x entradas, consulte este responder.

contestado el 23 de mayo de 17 a las 12:05

Necesito que se aleatoricen las últimas 6 entradas de mysql, no todas. - Darío

Puede modificar la consulta para obtener solo los últimos 6: no

Limit 6 tomará las últimas 6 y no al azar de las 5,000 entradas? ¿Cómo puedo modificar la consulta para hacer eso? - Darío

¿Qué quieres, 6 elementos aleatorios o los últimos 6 elementos aleatorios? - no

Últimos 6 aleatorizados. Entonces obtengo los últimos resultados 6 5 4 3 2 1, LUEGO se aleatorizan a 2 4 3 6 1 5 en cada carga de página. Siento que RAND() hará que las consultas mysql sean lentas, por lo que debe hacerse en php, simplemente reorganice la matriz usando php de alguna manera. - Darío

puedes usar esto ...

select * from (select * from table order by date desc limit 6) as t order by rand();

Respondido 04 Jul 12, 07:07

shuffle( $result );

foreach( $result as $key=>$value ):
    if( $key ):
       // get first item
       $firstOne = $value;
       continue;
    endif;
    // echo others
endforeach;

luego haga eco de $firstOne en el cuadro separado.

Respondido 04 Jul 12, 07:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.