Pagina 1 di 2
nomi random senza ripetizione
Inviato: 27/08/2015, 19:56
da Domenico2015
Buongiorno a tutti del forum. Vorrei gentilmente un'info: è possibile estrarre in maniera random dei nomi presenti in un file txt o mysql?...per me andrebbe bene qualsiasi alternativa. Inserendo i nomi in un array l'estrazione random avviene però compaiono molte volte i nomi già estratti..mi occorre che una volta estratto il nome questo non si ripeta più. Grazie in anticipo.
Re: nomi random senza ripetizione
Inviato: 27/08/2015, 22:22
da Micogian
Ammettiamo che tu abbia 100 nomi e debba estrarne 10 alla volta (se poi i numeri sono diversi ti adegui).
I nomi sono variabili del tipo:
$nome[1] = "Tizio";
$nome[2] = "Caio";
$nome[3] = "Sempronio";
..........
Crei una lista di numeri random da 1 a 100, prendi i primi 10 che corrispondono alle variabili con quel numero.
La volta successiva prendi i successivi 10 numeri della lista e così via.
In questo modo avrai tutti i 100 nomi random ma non doppi.
Re: nomi random senza ripetizione
Inviato: 27/08/2015, 22:28
da Sir Xiradorn
Puoi anche fare un ciclo while che estrae un nome random fino anche il tuo contatore non estrae dieci nomi diversi e degli if per escludere se sono uguali
Re: nomi random senza ripetizione
Inviato: 28/08/2015, 17:16
da Domenico2015
Ciao micogian, grazie mille per la risposta, soprattutto tempestiva...purtroppo non so come mettere in pratica ciò che hai scritto...per caso puoi inviarmi uno gia' pronto? sempre se non hai problemi. Grazie mille.
Re: nomi random senza ripetizione
Inviato: 28/08/2015, 17:45
da Micogian
Con qualche informazione in più sarebbe più semplice.
Ad esempio quanti sono i nomi e se devo estrarli da una lista creata appositamente o dall'elenco degli utenti, quanti nomi vanno estratti e con quale frequenza.
Re: nomi random senza ripetizione
Inviato: 28/08/2015, 18:43
da Domenico2015
La lista ha 100 nomi, sono scritti uno sotto l'altro in un file di testo, ma andrebbe bene anche se fossero scritti in un database mysql... i nomi devono essere estratti una alla volta, tipo come la tombola, alla fine devono uscire tutti i nomi, purché nell'estrazione non escano quelli gia' estratti. Grazie.
Re: nomi random senza ripetizione
Inviato: 28/08/2015, 20:01
da Micogian
Non basta, mi serve sapere quando viwnw fatta l'estrazione, come e dove viene visualizzato il risultato e con che frequenza deve uscire il nuovo nome.
Si potrebbe creare una lista random una volta per tutte, in pratica la sequenza viene stabilita all'inizio e la visualizzazione avviene una alla volta fino a completamento del ciclo.
Ma bisogna sapere quando avviene la visualizzazione del nome successivo, perchè l'estrazione avviene una volta sola, all'inizio. La procedura va studiata in base a quanto sopra.
potrebbe andar bene anche una tabella mysql conm 3 campi, un ID, il nome e un campo per inserire un valore numerico (0-1) che stabilisce se il nome è uscito o meno.
Re: nomi random senza ripetizione
Inviato: 29/08/2015, 15:08
da Domenico2015
ciao, l'estrazione deve avvenire ad ogni click del mouse. il risultato deve comparire nella stessa pagina web. per me andrebbe benissimo una lista casuale che parte dall'inizio fino alla fine..diciamo che dovrebbe essere tipo una tombola virtuale ma con nomi invece di numeri. spero di essere stato chiaro. Grazie di tutti.
Re: nomi random senza ripetizione
Inviato: 02/09/2015, 10:29
da Micogian
Per prima cosa va creata una tabella di nome "lista_nomi" nel database.
La tabella contiene 3 campi: id, nome, sel.
Il campo id deve essere AUTOINCREMENT, il campo sel è impostato a 0, viene sostituito con 1 se il record viene estratto.
Per creare la tabella apri il database con phpmyadmin, selezioni SQL e inserisci questo codice:
Codice: Seleziona tutto
CREATE TABLE IF NOT EXISTS `lista_nomi` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` text COLLATE utf8_unicode_ci NOT NULL,
`sel` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
La tabella va aggiornata con i nomi, il campo id è automatico e il campo sel è impostato a 0.
Il file php che estrae il nome a caso è questo:
Codice: Seleziona tutto
<?php
// CONNESSIONE AL DATABASE
global $db_name, $db_host, $db_user, $db_pwd ;
$db_name = 'nome_database' ;
$db_host = 'nome_dominio' ;
$db_user = 'user' ;
$db_pwd = 'password' ;
if (!@mysql_connect($db_host,$db_user,$db_pwd)) exit('<p>Impossibile connettersi al server del database b5 in questo momento.</p>');
if (!@mysql_select_db($db_name)) exit('<p>Impossibile connettersi al database in questo momento.</p>');
// Seleziona la lista dei records della tabella lista_nomi
$sql = "SELECT *
FROM lista_nomi
ORDER BY id";
$i = 1;
$lista = '';
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
$id[$i] = $row['id'];
$nome[$i] = $row['nome'];
$sel[$i] = $row['sel'];
//crea una lista dei nomi non estratti
if ($sel[$i] == '0' )
{
if ($lista == '')
{
$lista = $id[$i] ;
}else {
$lista = $lista . "," . $id[$i] ;
}
}
++$i ;
}
echo "Lista dei non estratti: " . $lista . "<br />";
$lista1 = explode(",", $lista);
//$numbers = range(1, 10);
shuffle($lista1);
echo "id e nome estratto: " . $lista1[0] . " - " . $nome[$lista1[0]] . "<br />";
// Aggiorna il campo sel del nome selezionato
$sql = "UPDATE lista_nomi
SET sel = '1'
WHERE id = $lista1[0]" ;
if (!@mysql_query($sql))
{
echo '<p>errore nella procedura di aggiornamento: ' . mysql_error() . '</p>' ;
}
if ($lista1[1] == '')
{
// Ripristina i valori iniziali della tabella lista_nomi
$sql1 = "UPDATE lista_nomi
SET sel = 0" ;
if (!@mysql_query($sql1))
{
echo '<p>errore nella procedura di azzeramento: ' . mysql_error() . '</p>' ;
}
}
?>
La procedura provvede a leggere la tabella "lista_nomi", crea una lista de nomi non estratti e la mette in ordine random.
Al primo record estratto viene sostituito il valore 0 del campo sel con 1 e la volta successiva non rientra nella lista.
Quando le estrazioni sono arrivate all'ultimo record i valori del campo "sel" vengono ripristinati a 0 e la sequenza ricomincia.
Questo è il codice php necessario per l'estrazione, poi va realizzata la pagina che deve contenere i risultati.
Una DEMO del risultato ottenuto (su una lista di 10 record) si può vedere
qui
aggiornare la pagina per estrarre il record successivo.
Re: R: nomi random senza ripetizione
Inviato: 02/09/2015, 10:48
da brunino
Potevi usare semplicemente nella query "ORDER BY RAND()"...
Inviato dal mio GT-S5360 con Tapatalk 2