Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema con ID

  1. #1

    Problema con ID

    Dato che vorrei fare un piccolo pannello di controllo che metta a disposizione il "riposizionamento" dei dati all'interno della tabella, pensavo di effettuare un'operazione sugli ID, che sono le chiavi primarie. Sono sorti un po' di problemi, perché in questo modo mi toccherebbe modificare tutti gli ID che stanno sotto il ché comporterebbe un sostanzioso numero di query per tutti i vari UPDATE dei singoli ID, ma io vorrei limitare quanto il più possibile i dialoghi con il DataBase.
    Mi chiedevo se fosse possibile fare l'UPDATE di più records dello stesso campo mettendo però numeri diversi in ogni campo, oppure se sapete un'altra soluzione per il mio problema.

    Un esempio pratico di quel che vorrei fare è questo:
    ID: Lettera
    1: B
    2: C
    3: A <-- Scelgo di far passare questo campo come primo
    4: D

    Il risultato dovrebbe essere questo:
    1: A
    2: B
    3: C
    4: D

    Grazie in anticipo per le risposte! ^^

  2. #2
    non puoi farlo con una sola query a meno che non usi un id temporaneo, perchè si verrebbe a creare una situazione di id duplicato

    ti conviene estrarre il valore che devi mettere all'inizio e tenerlo temporaneamente in php

    (select * from tabella where id = $id)

    dopodichè

    update tabella set id = id + 1 where id < $id

    infine (dato che l'id 0 è passato a 1 lasciando il posto vuoto)

    insert into tabella (id, altri campi) values (0, $altrivalori)


    in questo modo te la cavi con 3 query (lunghe ma solo 3)
    Armageddon - Chief Developer

    Stiamo cercando collaboratori!

  3. #3
    Grazie! Non avevo pensato a questa soluzione di mettere quel WHERE :sisi:

  4. #4
    Dato che non posso più modificare il precedente, posto un'altra volta.

    Alla fine ho dovuto smanettare parecchio per riuscire a far funzionare il metodo, anche se ho dovuto aggiungere altre 5 query, che son sempre meglio di venti e più... Per chiunque avesse avuto o avrà il mio stesso problema, posto qua il codice finale:
    [PHP]
    $sql="ALTER TABLE nome_tabella CHANGE ID ID TINYINT(4) NOT NULL";
    mysql_query($sql,$db);
    $sql="ALTER TABLE nome_tabella DROP PRIMARY KEY";
    mysql_query($sql,$db);
    $sql="UPDATE nome_tabella SET ID = 0 WHERE ID = $old_id"
    mysql_query($sql,$db);
    $sql="UPDATE nome_tabella SET ID = ID+1 WHERE ID < $old_id AND ID >= $new_id";
    mysql_query($sql,$db);
    $sql="UPDATE nome_tabella SET ID = $new_id WHERE ID = 0";
    mysql_query($sql,$db);
    $sql="ALTER TABLE nome_tabella CHANGE ID ID TINYINT(4) NOT NULL AUTO_INCREMENT";
    mysql_query($sql,$db);
    $sql="ALTER TABLE nome_tabella ADD PRIMARY KEY (ID)";
    mysql_query($sql,$db);
    $sql="ALTER TABLE nome_tabella ORDER BY ID";
    mysql_query($sql,$db);
    [PHP]
    Il nome delle variabili dovrebbe essere più che chiaro. L'ultima query potrebbe anche non essere messa, ma è giusto per fare un po' di chiarezza nel database.

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.