Hola Humanista.
En realidad tu consulta no es del todo "aleatorioa"... si entendí correctamente lo que quieres es a partir de un id aleatorio ordenar los registros presentando primeramente todos aquellos cuyo ID sea mayor o igual a ese numero aleatorio y una vez que llegues al último de los id's, listar aquellos registros menores al número aleatorio... ¿es correcto como entiendo el problema?, si es así entonces debes hacerlo por partes:
Para el ejemplo voy a considerar la siguiente tabla:
Código MySQL:
Ver original+------+-------------+
| id | descripcion |
+------+-------------+
| 1 | uno |
| 2 | dos |
| 3 | tres |
| 4 | cuatro |
| 5 | cinco |
| 6 | seis |
| 7 | siete |
| 8 | ocho |
| 9 | nueve |
| 10 | diez |
| 11 | once |
| 12 | doce |
+------+-------------+
12 rows
in set (0.00 sec
)
Ahora bien, el procedimiento sería el siguiente:
PRIMER PASO: determinar un número aleatorio entre 1 y el valor máximo de tu tabla, en este caso el número 12... hay varias formas de obtener un aleatorio entre un rango determinado, una de estas sería así:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
+------------+
| @aleatorio |
+------------+
| 5 |
+------------+
SEGUNDO PASO: Ahora, con esta variable @aleatorio, deberías presentar primero los id's del 5 al 12 y después los id's del 1 al 4, esto lo harías con un ORDER BY condicional:
Código MySQL:
Ver original+------+-------------+
| id | descripcion |
+------+-------------+
| 5 | cinco |
| 6 | seis |
| 7 | siete |
| 8 | ocho |
| 9 | nueve |
| 10 | diez |
| 11 | once |
| 12 | doce |
| 1 | uno |
| 2 | dos |
| 3 | tres |
| 4 | cuatro |
+------+-------------+
12 rows
in set (0.00 sec
)
Si vuelves a ejecutar las consultas, obtendrás otro resultado distinto:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
+------------+
| @aleatorio |
+------------+
| 10 |
+------------+
+------+-------------+
| id | descripcion |
+------+-------------+
| 10 | diez |
| 11 | once |
| 12 | doce |
| 1 | uno |
| 2 | dos |
| 3 | tres |
| 4 | cuatro |
| 5 | cinco |
| 6 | seis |
| 7 | siete |
| 8 | ocho |
| 9 | nueve |
+------+-------------+
12 rows
in set (0.00 sec
)
Checa el script para ver si es más o menos lo que necesitas.
Saludos
Leo