Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [MYSQL] Aggiornamento degli id

    Ciao a tutti, sto iniziando a smanettare con i database, ma mi sono già inceppato.


    In pratica, creo una tabella inviando questa query:
    Codice PHP:
    CREATE TABLE $section (id INT (5UNSIGNED not null AUTO_INCREMENTtit VARCHAR (255not null txt TEXT not null dat INT (11) , PRIMARY KEY (id)) 

    Poi, aggiungo delle righe con questa:
    Codice PHP:
    INSERT INTO $section (tittxtdatVALUES ('$title''$text''$date'

    Adesso arriva il problema: mettiamo che io abbia nella mia tabella 7 righe. Voglio cancellare la riga nr. 3. Quindi:
    Codice PHP:
    DELETE FROM $section WHERE id=$id //In questo caso $id varrà 3 

    Adesso però voglio che gli id delle righe 4, 5, 6 e 7 diventino rispettivamente 3, 4, 5 e 6, in modo da non avere dei "buchi" negli id (cioè, ad esempio, da non avere 1, 2, 4, 5, 6 e 7). Quindi:
    Codice PHP:
    SELECT count(*) AS tot FROM $section 

    Sapendo il totale di id, eseguo questo codice restante:
    Codice PHP:
    $db_max_id "SELECT count(*) AS tot FROM $section";
    $db_tot mysql_query($db_max_id);
    $tot mysql_fetch_array($db_tot);

    $max_id $tot['tot'] - 1;
    $actual_id $id 1;

    while (
    $max_id >= $actual_id)
    {
        
    $new_id $actual_id 1;
        
    $db_update_id "UPDATE $section SET id=$new_id WHERE id=$actual_id";

        if (
    mysql_query($db_update_id) == FALSE)
        {
            die (
    "Errore durante l'aggiornamento degli id");
        }
        
    $actual_id 1;
    }
    echo 
    'Fatto!'

    Ma purtroppo non funziona! La riga viene eliminata ma gli id non vengono aggiornati... Qualcuno sa dirmi perchè??
    Earn money for searching the internet:
    Homepages Friends

  2. #2
    vuoi fare una cosa che non ha senso. L'id e' unico e identifica uno specifico record e dovrebbe essere "incambiabile". Se vuoi una numerazione ordinata dei record aggiungi un campo e gioca su quello, oppure numerali con il php quando li estrai.

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

  3. #3
    In pratica (non so se ci siano altri sistemi per farlo, ma dato che sono alle prime armi ho pensato a questo) vorrei creare un sistema che mi permetta di visualizzare ad esempio tutti i titoli di determinati testi in un ordine da me prestabilito. Pensavo quindi di ordinare gli id in modo che il numero 1 sia il primo, il 2 sia il secondo, ecc. La necessità di cambiare l'id è quella, ad esempio, nel caso in cui io dovessi spostare più in su un determinato testo....
    Spero di essere stato chiaro nella spiegazione!
    Earn money for searching the internet:
    Homepages Friends

  4. #4
    Allora fai come ti ha suggerito Piero, aggiungi un altro campo per l'ordinamento
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  5. #5
    A questo punto l'id non serve a un tubo allora... Ok, grazie!
    Earn money for searching the internet:
    Homepages Friends

  6. #6
    Comunque, solo a titolo informativo, cos'è che nel codice non mi permette di modificare il campo id??? E' forse l'AUTO_INCREMENT??? Oppure è il PRIMARY KEY (id)??? Oppure c'è un errore da qualche altra parte???

    Grazie
    Earn money for searching the internet:
    Homepages Friends

  7. #7
    Originariamente inviato da ana4ever-vids
    Comunque, solo a titolo informativo, cos'è che nel codice non mi permette di modificare il campo id??? E' forse l'AUTO_INCREMENT??? Oppure è il PRIMARY KEY (id)??? Oppure c'è un errore da qualche altra parte???

    Grazie
    auto increment va sempre avanti fino ad arrivare all'overflow, cioe' al massimo numero consentito dal campo e quindi rimettera' tutti i bit a zero e ricomincera' da capo, salvo doppioni presenti su cui dara' errore di valore duplicato.

    Cosa non puo' fare: scendere al di sotto dell'ultimo valore indicizzato. Ma si puo', se un id inferiore all'indice corrente fosse libero, si puo' "puntare" ed inserire in modo esplicito l'id mancante.

    Ma la chiave primaria ha la funzione di identificare in modo univoco ogni record inserito. Compreso i defunti ed annullati. Quindi e' contro la natura stessa della chiave primaria modificare e riaggiustare i valori delle chiavi primarie stesse. Anche se questo fosse possibile e/o fattibile, chi dovesse vedere questa cosa in uno script pensera' che e' stato scritto da una mano strappata all'agricoltura.... Con tutto il rispetto dovuto alle mani agricole strappate....



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

  8. #8
    Quindi se io non dicessi che id è una chiave primaria, riuscirei a modificare i campi "id"??
    Earn money for searching the internet:
    Homepages Friends

  9. #9
    Originariamente inviato da ana4ever-vids
    Quindi se io non dicessi che id è una chiave primaria, riuscirei a modificare i campi "id"??
    gia', ma anche non potra' essere autoincrement.

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

  10. #10
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da ana4ever-vids
    Quindi se io non dicessi che id è una chiave primaria, riuscirei a modificare i campi "id"??
    Guarda che non è la chiave primaria il motivo per cui non riesci a modificarli.
    Non ho capito esattamente per quale motivo il tuo codice non funziona, ma è concepito malissimo.
    E' vero che non ha senso modificare gli id, ma tecnicamente puoi tranquillamente farlo anche se sono autoincrement.
    Se vuoi gestire l'ordinamento fai come ti hanno consigliato: usa un campo apposito.
    Quando sparisce un elemento l'update è semplicissimo

    UPDATE tabella SET ordine = ordine - 1 WHERE ordine > x

    (dove x è la posizione che aveva l'elemento eliminato)

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.