PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [SQL] Doppelte Spalten bei Add Ignorieren



Lokutos
17.05.2011, 05:08
Da meine Addons zum Teil auf den selben spalten beruhen wie andere
aber nicht standart im vms sind würde ich diese gerne immer prüfen ob sie vorhanden sind un notfalls anlegen.

gibt es eine möglichkeit
sozusagen

ALTER TABLE vms_gebuchte_werbung ADD beschreibung varchar(50) NOT NULL;
z.b. wie bei einer Tabelle hinzufügen mit If Not EXISTS zu erweitern

z.b. ALTER TABLE vms_gebuchte_werbung ADD IF NOT EXIST beschreibung varchar(50) NOT NULL;

MFg Lokutos

Gremlin
17.05.2011, 11:55
Du könntest das vorher checken in einem extra query oder ganz einfach mit:

ALTER IGNORE TABLE....

Oder einfach immer den Query absenden wirft halt nen mysql_error aus, den du aber ja nicht ausgeben musst.

Lokutos
17.05.2011, 12:22
Das das ding.
ist eine .sql datei.
sprich wird nicht von einem Script ausgeführt.

Gremlin
17.05.2011, 12:24
Und was spricht dagegen die SQL zu bearbeiten? und das IGNORE zu adden?

Lokutos
17.05.2011, 16:04
INSERT IGNORE INTO funktioniert
ALTER IGNORE TABLE funktioniert nicht


ALTER IGNORE TABLE `vms_userdaten` ADD `sutosurfsort` ENUM( 'aufendhalt', 'verdienst', 'reload', 'zeitverdienst' ) NOT NULL DEFAULT 'verdienst',
ADD `sutosurfsorta` ENUM( 'asc', 'desc' ) NOT NULL DEFAULT 'desc';

MySQL meldet: Dokumentation
#1060 - Duplicate column name 'sutosurfsort'

jpwfour
18.05.2011, 12:52
Was spricht denn gegen ein PHP Installation Skript? Ist definitiv kundenfreundlicher, und du schreibst, es geht um deine Addons, daher kannst du sowas wohl mitliefern?

Eine gute/schnelle/versionsübergreifende Methode gibt es afaik nicht (wie dir im Klammforum: http://www.klamm.de/forum/f28/ignore-ohne-wirkung-361761.html ja auch schon mitgeteilt wurde :suspicious:), allerdings ist es natürlich trotzdem möglich :yes:


delimiter //
CREATE PROCEDURE addcol() BEGIN
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE COLUMN_NAME='c' AND TABLE_NAME='t'
)
THEN
ALTER TABLE `t`
ADD COLUMN `c` int(11) NOT NULL default 0;
END IF;
END;
//
delimiter ;
CALL addcol();
DROP PROCEDURE addcol;

Das bekommt man aber denke ich auch kaum in eine .sql Datei, selbst in PHPMyAdmin wirds schwierig (da kann man Begrenzer afaik nur mit einem extra Input unter dem SQL Eingabefeld auswählen).

In PHPMyAdmin müsste mand as wohl etwa so machen:


DROP PROCEDURE IF EXISTS addcol//
CREATE PROCEDURE addcol() BEGIN
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE COLUMN_NAME='c' AND TABLE_NAME='t'
)
THEN
ALTER TABLE `t`
ADD COLUMN `c` int(11) NOT NULL default 0;
END IF;
END;
//
CALL addcol()//
DROP PROCEDURE addcol//

Und als Begrenzer dann // eingeben.