Ho bisogno di aggiungere una colonna ad una tabella.
Questa colonna però potrebbe già esitere.
...mi ritorna lo stesso errore se 'pippo' esiste già.Codice:ALTER IGNORE TABLE `test` ADD pippo int(11) NOT NULL default '0'
Mi aiutate?
Grazie.
Ho bisogno di aggiungere una colonna ad una tabella.
Questa colonna però potrebbe già esitere.
...mi ritorna lo stesso errore se 'pippo' esiste già.Codice:ALTER IGNORE TABLE `test` ADD pippo int(11) NOT NULL default '0'
Mi aiutate?
Grazie.
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:
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.Codice:show columns from <nome_tabell> like <nome_campo_tra_apici>
Vorrei realizzare la cosa senza l'ausilio del PHP.
Anche le SQL hanno IF...THEN ma non riesco...
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.
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:
Oppure verificare in questo modo se, tramite sql, se il campo non esiste:Codice:IF (show columns from <nome_tabell> like <nome_campo_tra_apici> > 0) { ALTER TABLE test ADD pippo INT(11) NOT NULL DEFAULT 0}
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
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.
Chiedo venia, ho frainteso la parte "aggiungere colonna"