salve sto gestendo una tabella 'utenti' in cui ho esigenza di avere un id_utente nellaforma ab0001,ad ogni nuovo utente devo incrementare il valore numerico es ab0002,ab0003.
Come posso fare?
grazie
salve sto gestendo una tabella 'utenti' in cui ho esigenza di avere un id_utente nellaforma ab0001,ad ogni nuovo utente devo incrementare il valore numerico es ab0002,ab0003.
Come posso fare?
grazie
o.O
una cosa .... peche' li gestisci cosi' ?
non puoi impostare la chiave primaria intera con flag "zerofill" nel database elasciare al db di smazzarsi gli auto_increment ?
Poi piazzi una colonna con il tuo flag "ab" "bc" o quello che sia ?
Potresti semplicemente gestirli con auto_incrementOriginariamente inviato da lepper
salve sto gestendo una tabella 'utenti' in cui ho esigenza di avere un id_utente nellaforma ab0001,ad ogni nuovo utente devo incrementare il valore numerico es ab0002,ab0003.
Come posso fare?
grazie
Comunque ti ho scritto una piccola funzione
Codice PHP:
function add_user_id($test){
$num = substr($test,2);
$num++;
switch(strlen($num)){
case "1": $newstring = "ab000".$num; break;
case "2": $newstring = "ab00".$num; break;
case "3": $newstring = "ab0".$num; break;
default: $newstring = "ab".$num; break;
}
return $newstring;
}
$id = mysql_query("SELECT id FROM utenti....");
$newid = add_user_id($id);
Non si finisce mai di imparare...
o.OOOOOO
NOOOOOOOOOOOOOOOOOOOOOOO
se proprio vogliamo :
1- lock table
2- estrazione ultimo campo inserito (quello con id piu' alto .. .sperando che le fralg inziiali non facciano fallire il controllo lessicografico eventualmente controllermo la data di creazione se esiste)
3- separazione porziona testuale da numerica
4- incremento
5- salvataggio
6- unlock table
CMq resta il fatto che la forma dei codice non va bene ... ... quindi prima usimamo un formato codice corretto meglio e' . Anche per le performance del sistema.
Era solo un esempio per aumentare quel campo, l'ho testata in localeOriginariamente inviato da Virus_101
o.OOOOOO
NOOOOOOOOOOOOOOOOOOOOOOO
se proprio vogliamo :
1- lock table
2- estrazione ultimo campo inserito (quello con id piu' alto .. .sperando che le fralg inziiali non facciano fallire il controllo lessicografico eventualmente controllermo la data di creazione se esiste)
3- separazione porziona testuale da numerica
4- incremento
5- salvataggio
6- unlock table
CMq resta il fatto che la forma dei codice non va bene ... ... quindi prima usimamo un formato codice corretto meglio e' . Anche per le performance del sistema.
ammesso che usi quel nome come id e funziona bene, qual'è il problema?
Non si finisce mai di imparare...
Diversi. Principalmente nulla garantisce l'unicita' del nuovo id creato, in caso di connessioni simultanee due utenti potrebbero avere lo stesso id (cosa che con un campo autoincrement nel db non e' possibile).Originariamente inviato da Soop(this)
qual'è il problema?
In secondo luogo il tuo codice e' sbagliato, perche' alla funzione passi il risultato di mysql_query() che e' una resource e non certo un valore contenuto nel database.
In ultimo, il tuo switch altro non e' che un modo assurdo per scrivere
Codice PHP:
$newstring = sprintf('ab%04d', 145);
la scelta è dovuto al fatto che questo db dovrà poi essere sincronizzato con un programma gestionale e quindi non possiamo uscire da certi parametri,devo lavorare su un database non scritto da me e non modificabile.
Effettivamente il problema,trattandosi di un ecommerce è che in caso di registrazioni simultanee potrei non avere un id univoco..
E ti sembra poco? In un e-commerce poi!Originariamente inviato da lepper
Effettivamente il problema,trattandosi di un ecommerce è che in caso di registrazioni simultanee potrei non avere un id univoco..
"Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)
se ho chiesto aiuto non mi sembra di sottovalutare il problema.
GUarda fossi in te farei cosi'
table cose
(
id int auto_increment not null,
ref_code varchar(xxx) unique not null , // oa quello che sia nn ricordo ora la sintassi precisa
primary key(id)
)
poi rendi ref_code un indice della tabella.
Cosi' hai gli id numerici tuoi personali e il codice di riferimento per il db esterno.
Quidni quando devi inserirei loccki la table (oppure usi la select * from table for update se usi innodb) esegui il controllo per l'ultimo codice inserito lo incrementi come suggerito sopra da kb. E viaaaaa verso l'infinito e oltre