Creare un codice univoco con metodo random

di Anonimizzato10337 il
18 risposte
Salve, volevo chiedervi un consiglio. Ho creato un e-commerce dove ogni ordine viene memorizzato in ciascun record, per tre articoli ordinati, ad esempio , avrò tre record. Allora ho pensato prima di riempire i campi del database di generare un numero univoco (che sarà un campo del database) con il metodo rand che funga da identificatore per tutti i record del suddetto ordine, in modo tale che quando vorrò richiamarlo potrò usare quel numero univoco. Prima che il campo venga riempito da questa variabile generata , faccio un ciclo while per verificare che questo numero non abbia dei precedenti doppioni nella tabella, se l'esito è negativo faccio inserire i record nel database.

Secondo voi è un metodo valido?

18 Risposte

  • Io nei tracciati record ho sempre usato il progressivo (ascendente o discendente dipende dall'utilizzo), analogamente a quello che in mysql è definito come AUTO_INCREMENT (+/-).
  • Ad essere sincero non ho capito tanto cosa vuoi dire. Parli di interrogare il database con il metodo ASC o DESC? Se è quello non mi serve. Io ho necessità di avere un campo univoco che mi permetta di richiamare un ordine avente più di un record e se uso l'auto increment non ottengo quello che voglio.

    Oggi pensavo, e se mettessi come codice univoco per ogni ordine il numero dei record totali ogni volta? Ogni ordine così anche se fosse compreso di più di un record avrebbe un solo numero che per ogni nuovo ordine verrebbe incrementato di uno, ovvero del numero del record attuale che sarà sempre diverso. Certo dovrei prima di inserire l'ordine creare una select per scoprire quanti record ci sono attualmente.
  • Ad essere sincero non ho capito tanto cosa vuoi dire. Parli di interrogare il database con il metodo ASC o DESC?
    No, no... non mi riferisco al database, ma al tracciato record. Ecco un esempio di header
    
    +------+--------------------+---------+--------===
    |  Tr  |    Num.Progress.   |   sub   |
    +------+--------------------+---------+----===
    
    Oggi pensavo, e se mettessi come codice univoco per ogni ordine il numero dei record totali ogni volta?
    In questi casi il progressivo viene prelevato da un'altra tabella di parametri generale.
  • Ma come si crea questa tabella di parametri generale? Come funziona il prelievo del campo che poi dovrò usare per riempirlo nella tabella ordini? Sono un pò confuso..
  • Non so dimmi se ho capito:

    1)Creo due tabelle, una ordini e l'altra parametri generali
    2)Riempio i campi della tabella parametri generali anche solo due campi (id e data ad esempio)
    3)Riempio i campi della tabella ordini e prelevo il progressivo dalla tabella parametri generali, ovvero l'auto increment dell' ultimo record attuale

    E' così?
  • Solitamente esiste una tabella che deve contenere queste informazioni.
    Si inizializza a e poi ogni volta che che necessiti del progressivo leggi lockando il record incrementi di uno scrivi il campo e rilasci il lock.
    Il progressivo che hai recuperato è univoco. Se hai + record o altro da collegare al progressivo lo puoi fare con un sub. Esempio:
    
    Tr   Progress.  Sub
     0  + 0000001  + 000001
     0  + 0000001  + 000002
     0  + 0000001  + 000003
    ...
    
    Che naturalmente userai come chiave.
    Nell'esempio viene usato un Tr (Tipo Rekord) che potrebbe identificare Bozza/Ordine/Vendita...
    Se non ti serve puoi farne a meno
  • 2)Riempio i campi della tabella parametri generali anche solo due campi (id e data ad esempio)
    3)Riempio i campi della tabella ordini e prelevo il progressivo dalla tabella parametri generali, ovvero l'auto increment dell' ultimo record attuale
    
    Tabella Generale Rekord Unico 0 (zero)
    +----------+----------+----------+--------===
    |  INFO 1  |  INFO 2  | N ProgrA |
    +----------+----------+----------+--===
    
  • Comunque questa è una domanda che non centra un tubo con PHP...
    Questa è analisi!
  • E quale sarebbe la sezione per parlare di queste cose? MYSQL?
  • Comunque questa è una domanda che non centra un tubo con PHP...
    Questa è analisi!
    E quale sarebbe la sezione per parlare di queste cose? MYSQL?
    Io non sono un moderatore,
    forse è un argomento da "Teoria delle Sviluppo Software".... visto che non stiamo parlando né di PHP né di mysql...
  • Bè non saprei, comunque io non conosco quest lock di cui mi parli, non l'ho mai usato e quindi non ho capito niente.

    Quando creo la tabella perchè dovrei inizializzarla?

    Cioè, se io devo riempire la tabella secondaria, devo incrementare il numero , devo poi prendere questo valore ed inserirlo nella tabella ordini la vedo davvero articolata come cosa
  • Bè non saprei, comunque io non conosco quest lock di cui mi parli, non l'ho mai usato e quindi non ho capito niente
    Il lock è usato per impedire l'eventuale accesso al record nello stesso tempo da + utenze
    x mysql leggi:http://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html

    Quando creo la tabella perchè dovrei inizializzarla?
    Di solito queste info vengono messe nelle tabelle di parametri generali. Devi inizializzarla come qualsiasi altro campo che utilizzi
    Cioè, se io devo riempire la tabella secondaria, devo incrementare il numero , devo poi prendere questo valore ed inserirlo nella tabella ordini la vedo davvero articolata come cosa
    Non devi riempire la tabella secondaria, devi solo utilizzare il numero che hai appena estratto dalla prima tabella ed usarlo come numero univoco.
  • Se usi una tabella a record singolo puoi anche fare cosi:
    
    lock tables db.parametri write;
    select progressivo from db.parametri;
    update db.parametri set progressivo=<valore_letto_precedentemente_+_1>;
    unlock tables;
    
    FINE
  • Forse ora sto capendo, vediamo se è vero:

    1)Creo due tabelle, ad esempio tbordini e tbparametri quest' ultimo con un campo id e l' altro chiamato progressivo dove avrò il numero da prelevare e da aggionare ogni volta. Poi scrivo il seguente codice:

    lock tables tbparametri write;
    $sql1 = "select progressivo from tbparametri'";
    $query1 = mysql_query($sql1) or die("no");
    $row=mysql_fetch_row($query1);
    $progressivo = $row[1]; // NEL $row[1] c'è il numero progressivo

    update tbparametri set progressivo=$progressivo+1;
    unlock tables;

    $sql2 = "Insert into tbordini(esempio,esempio,esempio, progressivo)values('$esempio,'$esempi','$esempio,'$progressivo')";
    ..........................................

    Giusto?
Devi accedere o registrarti per scrivere nel forum
18 risposte