2011-08-20 16 views
7

Sembra che RAND sia ciò di cui ho bisogno, ma ho un po 'di problemi a capire come funziona.Come inserisco un valore casuale in mysql?

Ho bisogno di inserire un numero casuale tra 60 e 120 in un paio di migliaia di righe. Il nome della tabella è: l'elenco e il nome della colonna sono: hits

Potrebbe aiutarmi per favore?

risposta

21

Per effettuare un intero casuale compreso tra 60 e 120, è necessario fare un po 'di aritmetica con i risultati di RAND(), che produce valori in virgola solo galleggianti:

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

Allora, cosa sta succedendo qui:

RAND() produrrà un valore come 0.847269199. Moltiplichiamo quello per 61, che ci dà il valore 51.83615194. Aggiungiamo 60, dato che è l'offset desiderato sopra lo zero (111.83615194). FLOOR() arrotonda il tutto al numero intero più vicino. Infine, si dispone di 111.

Per fare questo più di qualche migliaio di righe esistenti:

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

Vedere the MySQL docs on RAND() per ulteriori esempi.

Nota penso di avere il diritto di aritmetica, ma se si ottiene valori di 59 o 121 al di fuori del range atteso, cambiare il +60 su o in giù di conseguenza.

+0

Questo produrrà solo numeri in [0; 120) - è necessario moltiplicare per 61. – emboss

+0

@emboss Ha prodotto [60: 119], non [0: 120], ma hai ragione riguardo al 61 moltiplicatore –

+0

Oops, sì :) Correggerò che ... sembra che non possa più. – emboss

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

per ottenere un numero compreso tra 60 e 120 (compresi 60 e 120);

RAND() crea un numero nell'intervallo [0; 1) (che esclude 1). Quindi 61 * RAND() restituisce un numero in [0, 61). 61 * RAND() + 60 è in [60; 121) Arrotondando si assicura che il numero sia effettivamente in [60; 120].

0

Quando ho affrontato questo tipo di problema, ho provato manuale, ma ho più di 500 linee, ho logicamente portato un trucco che mi ha aiutato, perché se si esegue RAND su richiesta, si potrebbe finire per ottenere rapporto di errore a causa ai duplicati, o problema PRIMARY KEY, soprattutto se quella colonna è un PRIMARY KEY e AUTO INCREMENT.

  1. In primo luogo - ho rinominato la colonna in questione, per esempio miniera era ID -> IDS
  2. In secondo luogo - ho creato un'altra colonna e id Chiamato
  3. In terzo luogo - ho eseguito questo codice

storia UPDATE SET id = FLOOR (217 + RAND() * 2161)

Questo ha creato un numero casuale automaticamente, in seguito ho cancellato i IDS rinominati colume

credito da MICHAEL.

Problemi correlati