No estoy realmente seguro de cómo hacer esto, pero es posible en una consulta obtener x cantidad de registros de una tabla y, si no se encuentra lo suficiente, solo se seleccionarán aleatoriamente los duplicados.
Tengo una tabla de fotos, digamos que tiene 5 registros, y quiero sacar 10 registros y ordenarlos al azar, así que tengo algo como:
SELECT * FROM TABLE
ORDER BY RAND()
LIMIT 10
Esto solo hará retroceder 5 al azar, porque eso es todo lo que tengo en la tabla. ¿Puedo decirle a MySQL, hey, si encuentras menos de 10, solo puedes obtener más al azar hasta que alcances ese número?
Cualquier ayuda apreciada!
Gracias
Respuestas
0 para la respuesta № 1Esto lo hará:
select * from Table1
union all
select * from
(
select * from
(
select * from Table1 limit 10
union all
select * from Table1 limit 10
union all
select * from Table1 limit 10
union all
select * from Table1 limit 10
-- more unions...
) t2 order by rand()
) rand_ordered
limit 10
Unión de la tabla tantas veces como sea el número de registros necesarios (10 veces en este ejemplo) para que funcione con solo una fila en la tabla, ordene el resultado por rand()
y añadirlo a tu mesa con otro union all
.
Puede que esta no sea la solución con mejor rendimiento, pero lo hará.
Ejemplo aquí: SQLFIDDLE