Visualizzazione risultati 1 fino 5 di 5

Discussione: SQL, ID riga

  1. #1
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito SQL, ID riga

    ho un problema. per la prima volta devo creare una tabella nel mio database in cui le righe saranno numerate, tutti gli ID indicheranno una riga, le righe non verranno cancellate (quindi un ID una volta assegnato non viene più riassegnato)...
    il punto è che non so come fare.
    nel senso... come ricavo il massimo numero ID presente per inserire come ID della nuova riga Max+1?

    e come faccio per non aver problemi di più persone che inseriscono righe contemporaneamente in modo che gli ID non si sovrappongano?

    grazie per le risposte.

  2. #2
    Guest

    Predefinito

    per la seconda non hai problemi (ovvero nessuno inserirà una riga conlo stesso numero praticamente impossibile)

    per la prima fai così
    function getMax() {
    $sqlQuery = "select max(id) as num from tuaTabella ";
    $result = mysql_query( $sqlQuery);
    $row = mysql_fetch_array( $result );
    return $row['num'] +1;
    }

    dovrebbe andare

  3. #3
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito

    lo so che praticamente è impossibile che 2 persone riescano ad accedere così contemporaneamente da avere lo stesso risultato dalla query che legge il massimo id...

    ma proprio per questa sua improbabilità so che prima o poi mi capiterà.
    comunque, nelle tabelle SQL ho visto che c'è l'attributo unique per le colonne. se io imposto questo attributo per la colonna ID in teoria dovrebbe sputare fuori un errore nel caso dovesse capitare, giusto?

    PS, grazie per il suggerimento. non conoscevo abbastanza l'SQL per sapere che esistesse la possibilità di trovare il massimo con una righina così...

    PPS, il "as num" che vuol dire?

  4. #4
    Guest

    Predefinito

    Allora secondo me è impossibile che succeda ciò (ovvero due numeri uguali) perchè la funzione è quasi atomica (ovvero viene eseguita in una operazione soltanto) quindi per questo motivo non dovresti avere problemi. Però ti dò un consiglio. Se a te non interessa il numero identificativo piu' di tanto (ovvero se ci stanno dei buchi non te ne po' fregar di meno) allora ti consiglio di usare un valore int autoincrement così non devi starti ad impazzire sul max ecc ma basta fare un inserimento pari a NULL quando fai la query. Mi spiego meglio

    prima era così:
    $max = getMaxNews(); // esempio con le news
    $sqlQuery = "INSERT INTO news VALUES( $max, \"$testo\", $idUtente ); //esempio

    dopo sarà così:
    $sqlQuery = "INSERT INTO news VALUES( NULL, \"$testo\", $idUtente) ;

    molto piu' veloce.

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Posso scriverti qui una soluzione che ti darà MOOOLTI meno grattacapi? Aggiungi la clausola AUTO_INCREMENT nella dichiarazione del campo ID, al momento della creazione della tabella, il codice SQL è il seguente:
    Codice:
    CREATE TABLE Tabella (
       id INT UNSIGNED AUTO_INCREMENT,
       ... altri campi ...
       PRIMARY KEY (id)
    );
    In questo modo, non solo non avrai problemi ad assegnare il numero di ID manualmente, ma te ne sbatti anche dei problemi di concorrenza (si dice così quando si modifica in contemporanea una tabella), perché è il DBMS che pensa a tutto...

    Stammi bene...

    P.S. Noto solo adesso che è praticamente uguale al post di demenziale... spero di aver aggiunto qualcosa
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •