Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    [MySQL] generare id univoci progressivi

    Ho una tabella con un campo ID_MANUALE (non l'ID che identifica l'istanza che è già autoincrement) che contiene già alcuni valori non progressivi, ma moltissimi record sono impostati a zero. C'è un modo per assegnare un valore progressivo solo alle istanze che hanno valore zero?

    Ho provato una cosa tipo
    Codice PHP:
    UPDATE tbl1
    SET id_manuale 
    = ( SELECT MAX(id_manuale)+1 FROM tbl1 )
    WHERE id_manuale=
    Ma mi dice che non posso usare la stessa tabella per la SELECT nidificata

  2. #2
    da codice.. fai un ciclo ad esempio for i che va da 1....

    e ogni passata assegni i che si incrementa dal for.
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3

    Re: [MySQL] generare id univoci progressivi

    Originariamente inviato da james
    Ho provato una cosa tipo
    Codice PHP:
    UPDATE tbl1
    SET id_manuale 
    = ( SELECT MAX(id_manuale)+1 FROM tbl1 )
    WHERE id_manuale=
    Codice PHP:
    set @pippo = (select max(id_manualefrom tbl1);

    UPDATE tbl1
    SET id_manuale 
    = @pippo := @pippo 
    WHERE id_manuale
    =
    incrementi la variabile @pippo e passi il nuovo valore a id_manuale

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    Re: Re: [MySQL] generare id univoci progressivi

    Originariamente inviato da piero.mac
    Codice PHP:
    set @pippo = (select max(id_manualefrom tbl1);

    UPDATE tbl1
    SET id_manuale 
    = @pippo := @pippo 
    WHERE id_manuale
    =
    incrementi la variabile @pippo e passi il nuovo valore a id_manuale
    è esattamente quello che cercavo, senza passare da codice PHP o simili, ma non conosco questa sintassi, l'ho provata e funziona ma come fa? Voglio dire, non è un ciclo, non c'è un for o un while, mi sai dire due parole sul funzionamento?

  5. #5

    Re: Re: Re: [MySQL] generare id univoci progressivi

    Originariamente inviato da james
    è esattamente quello che cercavo, senza passare da codice PHP o simili, ma non conosco questa sintassi, l'ho provata e funziona ma come fa? Voglio dire, non è un ciclo, non c'è un for o un while, mi sai dire due parole sul funzionamento?
    e' molto semplice:

    crei una user variable @pippo contente il max valore della tabella.

    l'update fa la scansione seriale della tabella estraendo tutti i record che rispondono al where in una tabella provvisoria. Ecco il motivo per cui non puoi applicare una subquery sulla stessa tabella.

    Potresti eventualmente anche creare un ordinamento sui record da modificare in questa tabella temporanea con order by. Per esempio vorresti che la progressione risponda ad un determinato creiterio.

    Una volta preparata la tabella temporanea mysql applica riga per riga quanto predisposto dal set dell'update.

    nel nostro caso l'ordine con cui viene eseguito il set del campo e' da dx verso sx. in solido:

    @pippo + 1 -> e lo mette in @pippo (si mette := perche' e' un assegnazione alla variabile.)
    @pippo -> lo mette nel campo

    passa al secondo record e ripete il giochino. Finito il giochino riscrive i record nella tabella reale.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    Re: Re: Re: Re: [MySQL] generare id univoci progressivi

    Originariamente inviato da piero.mac
    e' molto semplice:

    crei una user variable @pippo contente il max valore della tabella.

    l'update fa la scansione seriale della tabella estraendo tutti i record che rispondono al where in una tabella provvisoria. Ecco il motivo per cui non puoi applicare una subquery sulla stessa tabella.

    Potresti eventualmente anche creare un ordinamento sui record da modificare in questa tabella temporanea con order by. Per esempio vorresti che la progressione risponda ad un determinato creiterio.

    Una volta preparata la tabella temporanea mysql applica riga per riga quanto predisposto dal set dell'update.

    nel nostro caso l'ordine con cui viene eseguito il set del campo e' da dx verso sx. in solido:

    @pippo + 1 -> e lo mette in @pippo (si mette := perche' e' un assegnazione alla variabile.)
    @pippo -> lo mette nel campo

    passa al secondo record e ripete il giochino. Finito il giochino riscrive i record nella tabella reale.
    grazie mille, estremamente esauriente! Non lo conoscevo affatto...

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Molto più semplicemente, bastava un update che impostasse la chiave a null e avresti utilizzato automaticamente i valori dell'auto_increment. Che fra l'altro, secondo me adesso produrrà valori doppi a quelli che hai inserito "a mano".

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    ehm... scusate per la prontezza, non mi ero accorto che è vecchia di un mese

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 © 2025 vBulletin Solutions, Inc. All rights reserved.