2011-08-20 17 views
7

Parece que RAND es lo que necesito, pero estoy teniendo problemas para entender cómo funciona.¿Cómo inserto un valor aleatorio en mysql?

Necesito insertar un número aleatorio entre 60 y 120 en un par de miles de filas. El nombre de la tabla es: listado y el nombre de la columna es: hits

¿Podría ayudarnos?

Respuesta

21

Para hacer un entero aleatorio entre 60 y 120, es necesario hacer un poco de aritmética con los resultados de RAND(), que produce valores de puntos solamente flotantes:

SELECT FLOOR(60 + RAND() * 61); 

Entonces, ¿qué está pasando aquí:

RAND() producirá un valor como 0.847269199. Multiplicamos eso por 61, lo que nos da el valor 51.83615194. Agregamos 60, ya que esa es su compensación deseada por encima de cero (111.83615194). FLOOR() redondea todo al número entero más cercano. Por último, usted tiene 111.

Para hacer esto más de unos pocos miles de filas existentes:

UPDATE table SET randcolumn = FLOOR(60 + RAND() * 61) WHERE (<some condition if necessary>); 

Ver the MySQL docs on RAND() para más ejemplos.

Nota creo que tengo el derecho de la aritmética, pero si te dan valores de 59 o 121 fuera del rango esperado, cambiar el +60 arriba o hacia abajo en consecuencia.

+0

Eso solo producirá números en [0; 120] - necesita multiplicar por 61. – emboss

+0

@emboss Produjo [60: 119], no [0: 120], pero tiene razón sobre el 61 multiplicador –

+0

Vaya, sí :) Voy a corregir eso ... parece que ya no puedo. – emboss

1
UPDATE X SET C = FLOOR(61 * RAND() + 60) WHERE ...; 

para obtener un número entre 60 y 120 (incluyendo 60 y 120);

RAND() crea un número en el intervalo [0; 1) (es decir, excluyendo 1). Entonces 61 * RAND() produce un número en [0, 61). 61 * RAND() + 60 está en [60; 121] Al redondear, asegúrese de que su número esté realmente en [60; 120].

0

Cuando me enfrenté a este tipo de problema, probé manual, pero tengo más de 500 líneas, que lógicamente traje un truco que me ayudó, porque si se ejecuta RAND en la consulta, que podría terminar recibiendo informe de error debido a Duplicados, O tema de LLAVE PRINCIPAL, especialmente si esa columna es PRIMARY KEY y AUTO INCREMENT.

  1. primer lugar - retitulé la columna en cuestión, por ejemplo mina era ID -> IDS
  2. En segundo lugar - creé otra columna y Llamado ID que
  3. En tercer lugar - me encontré con este código

historial de actualizaciones SET id = FLOOR (217 + RAND() * 2161)

Esto creó un número aleatorio de forma automática, después yo borrado el IDS ha cambiado el nombre colume

crédito FROM MICHAEL. Gracias

Cuestiones relacionadas