ciao a tutti, fare l'UPDATE di una colonna di una tabella,inserendo numeri casuali ma che non si ripetano,ho visto molti esempio ma non sono riuscito a farne andare nemmeno uno,qualcuno mi può aiutare?
ciao a tutti, fare l'UPDATE di una colonna di una tabella,inserendo numeri casuali ma che non si ripetano,ho visto molti esempio ma non sono riuscito a farne andare nemmeno uno,qualcuno mi può aiutare?
Bahh!! un numero casuale per sua definizione si puo ripetere appunto perché è casuale.
Dipende dal BD che usi e dalla applicazione,
solitamente queste cose si fanno a lato applicazione
La soluzione più complicata è
- calcolare un random
- verificare se gia esiste
--- se non esiste inserirlo
--- se esiste ricomincia a ricalcolarsi un altro random
ma ci soni anche delle soluzioni più banali,
se il tuo casuale potrebbe essere ad esempio crescente e regolare allora ti basta un campo autioncrementale.
oppure alcuni DB ti offrono gia la possibilità di inserire una Key univoca random
Che DB usi ??
quale applicazione ??
.
se usi MySql come DB e PHP come linguaggio di programmazione, puoi fare una cosa del genere
PS: questo ti genera sempre un numero di 5 cifreCodice PHP:
$rand_gen = "SELECT (FLOOR(10000 + RAND() * 99999)) as rInt FROM tabella WHERE 'rInt' NOT IN (SELECT randomInt FROM tabella LIMIT 1)"
$ex_rand_gen = mysqli_query($con, $rand_gen) or die ("qualcosa è andato storto: " mysqli_error());
$rand_val = mysqli_fetch_array($ex_rand_gen);
$rand_upd = "UPDATE tabella SET randomInt = {$rand_val['randomInt']} WHERE id = idDelRecordCheVuoiModificare";
$ex_rand_upd = mysqli_query($con, $rand_ins) or die ("qualcosa è andato storto nell'update: " mysqli_error());
Ultima modifica di clasku; 09-11-2014 a 12:14
in effetti non mi aspettavo tutto questo "casino"... forse faccio prima a farvi vedere il link e spiegare meglio ciò che vorrei ottenere : http://cedri.altervista.org/test.php
ho 80 domande (inserite in un DB MySQL)
i radio button sono generati da un ciclo WHILE e i relativi name sono formati da "risp"+ l'id della domanda quindi ottengo RISP1...RISP2...RISP3 ECC....
io avrei bisogno in pratica di disporre le domande in ordine casuale ma allo stesso tempo ho bisogno di lasciare in ordine crescente i name dei radio (da risp1 a risp80)
tu vuoi ottenere una cosa tipo questa?
oppure tipo questa?codice:domanda 5 - risp5 value=0, risp5 value=1 ecc domanda 80 - risp80 value=0, risp80 value=1 ecc domanda 1 - risp1 value=0, risp1 value=1 ecc
codice:domanda 5 - risp1 value=0, risp1 value=1 ecc domanda 80 - risp2 value=0, risp2 value=1 ecc domanda 1 - risp3 value=0, risp3 value=1 ecc
la seconda !![]()
e come correli le risposte alle domande? o non ti interessa e ti servono solo i valori delle risposte?
Comunque, lasciando perdere la parte di display della pagina (che credo vada in altra sezione), basta che nella tua query con le domande da presentare fai
otterrai un ordine casuale delle domandecodice:SELECT id, domanda FROM tabDomande ORDER BY RAND();
Ultima modifica di clasku; 09-11-2014 a 13:55
per correlare le domande,nella tabella ho inserito anche le categorie,quindi le risposte sono poi raggruppate in base al genere,a me servono solo i valori,
facendo order by rand() cosa che ho già provato ,ogni volta che si ricarica la pagina l'ordine casuale cambia,e io ho bisogno che i name delle risposte restino in ordine crescente in quanto faccio un controllo in jquery
io ho capito che a te serve mantenere le option in ordine progressivo e le domande in ordine random
se ho capito bene, vuoi variare solo i dati della colonna domande e lasciare gli altri fissi
io farei così, con il terzo parametro della funzione che può essere anche l'id della domanda (per avere le risposte correlate)
non ho capito la questione del ricaricare la pagina e di jQueryCodice PHP:
function printOption($s, $e, $r) {
// $s = valore di partenza per i radio
// $e = numero di radio
// $r = numero di riga a cui collegare i radio
for($v = $s; $v < ($s + $e); $v++) {
echo "\n\t<input type=\"radio\" value=\"$v\" name=\"risp_$r\">";
}
}
$query = "SELECT domanda FROM tabDomande ORDER BY RAND()";
$ex_query = mysqli_query($con, $query) or die ("qualcosa non ha funzionato: " .mysqli_error($con));
echo "domande\n";
echo "<form action='go.php' method=POST>";
$a = 1; // contatore per le righe
while($domande = mysqli_fetch_array($ex_query)) {
echo "\n<p>" . $domande['domanda'];
printOption(0, 5, $a);
echo "</p>";
$a++;
}
Ultima modifica di clasku; 09-11-2014 a 21:58
grazie per la risposta,oggi provo il codice che mi hai postato (rispondo solo ora perchè questi 4 giorni ero via) la questione del ricaricare era riferita al ORDER BY RAND() ovvero ogni volta che ricarico la pagina (F5) la query viene rieseguita,e quindi l'ordine casuale cambia