Mes recherches et les expériences n'ont pas donné encore de réponse, donc je suis en espérant de l'aide.
Je suis en modifiant le fichier d'installation d'une application qui, dans les versions précédentes n'ont pas de colonne qui je veux ajouter maintenant. Je ne veux pas ajouter de la colonne manuellement, mais dans le fichier d'installation et seulement si la colonne n'existe pas déjà dans la table.
Le tableau est créé comme suit:
CREATE TABLE IF NOT EXISTS `#__comm_subscribers` (
`subscriber_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`subscriber_name` varchar(64) NOT NULL default '',
`subscriber_surname` varchar(64) NOT NULL default '',
`subscriber_email` varchar(64) NOT NULL default '',
`confirmed` tinyint(1) NOT NULL default '0',
`subscribe_date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`subscriber_id`),
UNIQUE KEY `subscriber_email` (`subscriber_email`)
) ENGINE=MyISAM CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT='Subscribers for Comm are stored here.';
Si j'ajoute la suite, ci-dessous l'instruction create table, puis je ne suis pas sûr de ce qui se passe si la colonne existe déjà (et peut-être est peuplée):
ALTER TABLE `#__comm_subscribers` ADD `subscriber_surname`;
ALTER TABLE `#__comm_subscribers` MODIFY `subscriber_surname` varchar(64) NOT NULL default '';
Donc, j'ai essayé à l'issue de laquelle j'ai trouvé quelque part. Cela ne semble pas fonctionner, mais je ne suis pas entièrement sûr que je l'ai utilisé correctement.
/*delimiter '//'
CREATE PROCEDURE addcol() BEGIN
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE COLUMN_NAME='subscriber_surname' AND TABLE_NAME='#__comm_subscribers'
)
THEN
ALTER TABLE `#__comm_subscribers`
ADD COLUMN `subscriber_surname` varchar(64) NOT NULL default '';
END IF;
END;
//
delimiter ';'
CALL addcol();
DROP PROCEDURE addcol;*/
Quelqu'un aurait-il une bonne façon de le faire?