Una vista es un aconsulta que se ejecuta neuvamente cada vez que se invoca a la misma, y por consecuencia siempre se refrescará, dando lugar a la posibilidad de que los mismos registros aparezcan en cada llamada.
Eso es inevitable, tal como lo has hecho, y es el comportameinto normal my esperable.
La única posibilidad que veo es, o bien excluir los ID de los que ya se mostraron en cada nueva consulta, o bien realizar dos consultas:
- En la primera obtienes todos los IDs de los registros, ordenados aleatoriamente, pero sólo los ID. Nada más.
- La segunda consulta y subsiguientes, la realizas con la clausula ORDER BY y usando la función FIELD() sobre el campo de ID, y le pasas como parámetro el segmento de bloque de IDs, según se necesite.
Lo que NO puedes hacer es poner en ese caso el ORDER BY RAND() en la vista. No sirve. No es funcional.
O sea, la vista sería una vista normal
Luego haces un
Con el resultado de eso, luego creas programaticamente las llamadas a la misma vista, pero con un segmento de los IDs obtenidos, por ejemplo, diexz de ellos, tal que la query quede armada así:
Código MySQL:
Ver originalWHERE id
IN(ID
, 23, 185, 6, 91, 47, 11, 3, 99, 68, 325) ORDER BY FIELD(ID
, 23, 185, 6, 91, 47, 11, 3, 99, 68, 325);
¿Se entiende la idea?