Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    21

    incrimentare codice alfanumerico

    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

  2. #2
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    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 ?

  3. #3

    Re: incrimentare codice alfanumerico

    Originariamente 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
    Potresti semplicemente gestirli con auto_increment


    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...

  4. #4
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    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.

  5. #5
    Originariamente 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.
    Era solo un esempio per aumentare quel campo, l'ho testata in locale
    ammesso che usi quel nome come id e funziona bene, qual'è il problema?
    Non si finisce mai di imparare...

  6. #6
    Originariamente inviato da Soop(this)
    qual'è il problema?
    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).

    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); 

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    21
    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..

  8. #8
    Originariamente inviato da lepper
    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!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    21
    se ho chiesto aiuto non mi sembra di sottovalutare il problema.

  10. #10
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.