Update per sostituzione dati random in tabella gia popolata

di il
13 risposte

Update per sostituzione dati random in tabella gia popolata

Un saluto a tutti,
ho una tabella di un database strutturata in questo modo:

CREATE TABLE `appuntamenti` (
  `id_app` int(11) NOT NULL,
  `cliente` varchar(50) DEFAULT NULL,
  `gestore` varchar(50) DEFAULT NULL,
  `veicolo` varchar(20) DEFAULT NULL,
  `data` date DEFAULT NULL,
  `ora` varchar(10) DEFAULT NULL,
  `tlav` int(11) NOT NULL,
  `stato_pren` varchar(50) DEFAULT NULL,
  `tipo_pren` varchar(50) NOT NULL,
  `tipo_lavorazione` varchar(30) NOT NULL,
  `telefono` varchar(50) DEFAULT NULL,
  `note` longtext,
  `email` varchar(50) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
la tabella contiene 2664 record, avrei la necessità di sostituire i valori contenuti nel campo `telefono` con valori casuali, in sostanza devo inserire dei numeri telefonici inventati, la stessa cosa dovrei fare per il campo `cliente` che contiene un nome e cognome

Ho provato in questo modo, ma non funziona, anche perchè a me immagino serva una query di update e non insert

<?php

// BLOCCO CODICE CONNESSIONE DATABASE
$host = 'localhost';
$user = 'user';
$pass = 'password';
$db = 'database';

$mysqli = new mysqli("$host", "$user", "$pass", "$db");

$insert_rows = 2664; //il numero di righe che vogliamo inserire

$abc= array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"); // per generare nomi random
$num= array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); // per generare numeri random

// supponiamo che hai una tabella 'rubrica' coi campi 'id', 'nome', 'telefono'

for ($i=0; $i<$insert_rows; $i++)
{
   $cliente=''; // azzeriamo il nome
   $telefono=''; // azzeriamo il telefono

   $cliente_long1 = rand(5,10); // la lunghezza del nome in modo random, tra 5 e 10 lettere
   $cliente_long2 = rand(6,12); // la lunghezza del cognome in modo random, tra 6 e 12 lettere

   for($j=0;$j<$cliente_long1;$j++){ $cliente .= $abc[rand(0,count($abc)-1)]; } //genera il nome
   $cliente .= ' '; //aggiunge uno spazio
   for($j=0;$j<$cliente_long2;$j++){ $cliente .= $abc[rand(0,count($abc)-1)]; } //genera il cognome

   for($j=0;$j<10;$j++){ $telefono .= $num[rand(0,count($num)-1)]; } // genera il telefono di 10 cifre

   mysqli_query ("insert into appuntamenti ('id_app','cliente','gestore','veicolo','data','ora','tlav','stato_pren','tipo_pren','tipo_lavorazione','telefono','note','email') values ('','".ucwords($cliente)."','".$gestore."','".$veicolo."','".$data."','".$ora."','".$tlav."','".$stato_pren."','".$tipo_pren."','".tipo_lavorazione."','".$telefono."','".$note."','".$email."'"); // la query dell'insert
}

?>

Spero anzitutto di aver scritto nella sezione corretta e se cosi non fosse mi scuso anticipatamente

Grazie

13 Risposte

  • Re: Update per sostituzione dati random in tabella gia popolata

    E certo, se devi aggiornare la tabella è normale che ti serva l'update. Ma il procedimento è molto più semplice di come lo hai scritto tu. Fai una select sulla tabella e grazie a mysqli_fetch_array ti ritroverai tutte le rows in un array multidimensionale. A quel punto hai l'id_app di ogni row e quindi dopo aver generato numero, nome e cognome random non ti basta fare altro che una update solo delle colonne che t'interessano sulla riga avente come id_app quella presa in esame.

    Spero di essere stato chiaro.
  • Re: Update per sostituzione dati random in tabella gia popolata

    Ciao Eduadie,
    nel ringraziarti anzitutto per la risposta e rappresentandoti che sono un "programmatore" molto junior, potresti postarmi un esempio
  • Re: Update per sostituzione dati random in tabella gia popolata

    In realtà mysql ha sia RAND che SUBSTRING, consentendo di fare un UPDATE (o delle insert) "a colpo singolo"
  • Re: Update per sostituzione dati random in tabella gia popolata

    Ciao +m2+,
    io tutta questa esperienza ancora non ce l'ho, stando all'esempio postato, ovvero alla mia tabella e alla mia esigenza potreste fornirmi uno script di esempio che poi modello in base alle esigenze ?
  • Re: Update per sostituzione dati random in tabella gia popolata

    ccuomo ha scritto:


    Ciao +m2+,
    io tutta questa esperienza ancora non ce l'ho, stando all'esempio postato, ovvero alla mia tabella e alla mia esigenza potreste fornirmi uno script di esempio che poi modello in base alle esigenze ?
    non userei uno script, che è lento, bensì direttamente comanderei mysql
  • Re: Update per sostituzione dati random in tabella gia popolata

    Ok, resta il fatto che senza un esempio vado alla cieca
  • Re: Update per sostituzione dati random in tabella gia popolata

    ccuomo ha scritto:


    Ok, resta il fatto che senza un esempio vado alla cieca
    Hai solo l'imbarazzo della scelta
    select left(conv(floor(rand() * 999999999999999), 20, 10),10) as numerotelefono ;
    select left(conv(floor(rand() * 999999999999999), 20, 36),10) as nome ;
  • Re: Update per sostituzione dati random in tabella gia popolata

    +m2+ ha scritto:


    Hai solo l'imbarazzo della scelta
    select left(conv(floor(rand() * 999999999999999), 20, 10),10) as numerotelefono ;
    select left(conv(floor(rand() * 999999999999999), 20, 36),10) as nome ;

    Lanciando la query come da te suggerito non mi modificava tutti i 2664 record del database, pertanto ho lanciato questa che ha modificato
    correttamente i record anche se devo capire come fare la stessa cosa con il campo cliente e soprattutto come poter far si che i numeri di cellulare inizino con il numero 3
    
    UPDATE appuntamenti SET telefono = LPAD(FLOOR(RAND() * 10000000000), 10, '0')
    
  • Re: Update per sostituzione dati random in tabella gia popolata

    ccuomo ha scritto:


    Lanciando la query come da te suggerito non mi modificava tutti i 2664 record del database, pertanto ho lanciato questa che ha modificato
    correttamente i record anche se devo capire come fare la stessa cosa con il campo cliente e soprattutto come poter far si che i numeri di cellulare inizino con il numero 3
    
    UPDATE appuntamenti SET telefono = LPAD(FLOOR(RAND() * 10000000000), 10, '0')
    
    Certo che non ti modifica, è una query (una interrogazione).
    Per la domanda
    concat("3",quellochevuoi)
  • Re: Update per sostituzione dati random in tabella gia popolata

    +m2+ ha scritto:


    Certo che non ti modifica, è una query (una interrogazione).
    Per la domanda
    concat("3",quellochevuoi)
    Purtroppo non riesco a comprendere come implementare il tuo suggerimento per scrivere la query di update completa.

    E mi piacerebbe capire anche come effettuare l'update delle 2644 righe cliente composte da Nome Cognome
    popolando la colonna cliente con dati random (naturalmente parlo sempre di query di update)
  • Re: Update per sostituzione dati random in tabella gia popolata

    update appuntamenti set telefono=concat("3",left(conv(floor(rand() * 999999999999999), 20, 10),10))
    update appuntamenti set clienti=left(conv(floor(rand() * 999999999999999), 20, 36),10)
  • Re: Update per sostituzione dati random in tabella gia popolata

    +m2+ senza il tuo supporto non avrei risolto a stretto giro un problema che per quanto possa essere banale per chi è preparato ti assicuro che non lo è di certo per chi sta approcciando (per necessità) ad un mondo nuovo, certo è che non posso far altro che tesoro di tutte le info, adesso le eseguo meccanicamente ma sto annotando tutto per studiarne il concetto che alla fine sia quello fondamentale.

    Proprio a questo proposito ho lanciato sulla colonna clienti l'update e nella mia ignoranza mi sarei aspettato
    tipo: ROSSI GUIDO | BIANCHI MARIO | ecc. ecc
    update appuntamenti set clienti=left(conv(floor(rand() * 999999999999999), 20, 36),10)
    insomma il mio risultato atteso (cosa che non so se fattibile direttamente da mysql) era cognome spazio nome, invece ho ottenuto:

    2WNV2J52CB | 2T45L26R0L | 1JM2777T57

  • Re: Update per sostituzione dati random in tabella gia popolata

    Ti serve una tabella d'appoggio coi nomi maschili e femminili, e pure i cognomi.
    Dopodichè farai un update con join su riga (righe) random
Devi accedere o registrarti per scrivere nel forum
13 risposte