92 votes

Comment remplir une colonne avec des nombres aléatoires en SQL ? Je reçois la même valeur dans chaque rangée

UPDATE CattleProds
SET SheepTherapy=(ROUND((RAND()* 10000),0))
WHERE SheepTherapy IS NULL

Si je fais ensuite une SÉLECTION, je vois que mon nombre aléatoire est identique dans chaque ligne. Des idées pour générer des nombres aléatoires uniques ?

180voto

Andomar Points 115404

Au lieu de rand(), utilisez newid(), qui est recalculé pour chaque ligne du résultat. La façon habituelle est d'utiliser le modulo de la somme de contrôle. Notez que checksum(newid()) peut produire -2,147,483,648 et provoquer un dépassement d'entier sur abs(), nous devons donc utiliser modulo sur la valeur de retour checksum avant de la convertir en valeur absolue.

UPDATE CattleProds
SET    SheepTherapy = abs(checksum(NewId()) % 10000)
WHERE  SheepTherapy IS NULL

Cela génère un nombre aléatoire compris entre 0 et 9999.

-4voto

Vaso Nadiradze Points 7
require_once('db/connect.php');

//rand(1000000 , 9999999);

$products_query = "SELECT id FROM products";
$products_result = mysqli_query($conn, $products_query);
$products_row = mysqli_fetch_array($products_result);
$ids_array = [];

do
{
    array_push($ids_array, $products_row['id']);
}
while($products_row = mysqli_fetch_array($products_result));

/*
echo '<pre>';
print_r($ids_array);
echo '</pre>';
*/
$row_counter = count($ids_array);

for ($i=0; $i < $row_counter; $i++)
{ 
    $current_row = $ids_array[$i];
    $rand = rand(1000000 , 9999999);
    mysqli_query($conn , "UPDATE products SET code='$rand' WHERE id='$current_row'");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X