Visualizzazione risultati 1 fino 10 di 10

Discussione: MySql: aggiungere colonna se non esiste già

  1. #1
    Guest

    Question MySql: aggiungere colonna se non esiste già

    Ho bisogno di aggiungere una colonna ad una tabella.
    Questa colonna però potrebbe già esitere.

    Codice:
    ALTER IGNORE TABLE `test` ADD pippo int(11) NOT NULL default '0'
    ...mi ritorna lo stesso errore se 'pippo' esiste già.

    Mi aiutate?
    Grazie.

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Da quello che so io la clausola ignore si usa solo nell'instert per non far verificare errori nel caso di un valore univoco ripetuto, se non sbaglio.

    Cmq puoi utilizzare questo query per vedere se esiste o meno una cella:

    Codice:
    show columns from <nome_tabell> like <nome_campo_tra_apici>
    Basta eseguire questa query e controllare con mysql_num_rows() in risultato, se il risultato e 0 non esiste nessun campo del nome specificato dopo la clausola like ed esegui l'alter table normale.

    Sevenjeak
    Software developer and much more

  3. #3
    Guest

    Predefinito

    Vorrei realizzare la cosa senza l'ausilio del PHP.
    Anche le SQL hanno IF...THEN ma non riesco...

  4. #4
    Guest

    Predefinito

    L'analisi e le condizioni (IF ...) le devi fare via codice.

    Il suggerimento ti diceva di fare prima una verifica sull'esistenza del campo e poi in base alla risultanza agire.

    Le query da fare sono due.

    Non puoi fare una query sola con dentro tutti i controlli.

  5. #5
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Bhe.. che le condizione if esistono in sql è vero, ma non ho mai provato ad usarle, quindi non saprei.

    Ma da quello che mi risulta il THEN non esiste nel linguaggio sql.

    Potresti provare cosi, ma non saprei se funziona:

    Codice:
    IF (show columns from <nome_tabell> like <nome_campo_tra_apici> > 0) { ALTER TABLE test ADD pippo INT(11) NOT NULL DEFAULT 0}
    Oppure verificare in questo modo se, tramite sql, se il campo non esiste:

    http://snippets.dzone.com/posts/show/4663

    Ma come già detto non ho mai usato le condizione if, non saprei se funziona.

    Cmq, un'alternativa sarebbe di controllarlo tramite codice php, come già ho detto.

    P.S.: Ah... cosa che non avevo notato prima, nella tua prima query ho trovato un probabile errore, come mai dopo default metti lo 0 tra apici? non è una stringa, ma un intero, va senza apici.
    Ultima modifica di sevenjeak : 26-08-2011 alle ore 10.04.47

    Sevenjeak
    Software developer and much more

  6. #6
    Guest

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Scusa biccheddu, ma la funzione che hai proposto fa si che se si tenta di inserire un record la cui chiave primaria esiste già, al posto dell'insert venga eseguita un'altra azione.

    La richiesta invece è quella di modificare la struttura della tabella aggiungendo una colonna nel caso in cui questa non esista.
    L'intervento è a livello di struttura e non già di record.

  8. #8
    Guest

    Predefinito

    Chiedo venia, ho frainteso la parte "aggiungere colonna"

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    L'analisi e le condizioni (IF ...) le devi fare via codice.

    Il suggerimento ti diceva di fare prima una verifica sull'esistenza del campo e poi in base alla risultanza agire.

    Le query da fare sono due.

    Non puoi fare una query sola con dentro tutti i controlli.
    Mi va benissimo anche usare 3 o 4 query, ma... come fare?

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da robertobizzarri Visualizza messaggio
    Mi va benissimo anche usare 3 o 4 query, ma... come fare?
    Come ti avevano già suggerito, prima tramite la query

    Codice PHP:
    SHOW COLUMNS FROM <tuatabella> LIKE '<NOMECOLONNA>'
    controlli se la colonna esiste già e nel caso in cui non fosse presente la aggiungi con un ALTER TABLE

Regole di scrittura

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