Autor Zpráva
vomackav
Profil *
Zdar,
potřeboval bych radu, zda existuje u

ALTER TABLE tabulka ADD COLUMN novy_sloupec INT( 2 )

něco jako IF NOT EXISTS - zkrátka pokud ten sloupec neexistuje, vytvoří se, pokud existuje, nic se nestane.
Díky V.
juriad
Profil
Ne. Nedává to smysl. Tento příkaz má volat jen administrátor databáze a ten ví, jestli takový sloupec již existuje.
Obecně, pokud aplikace potřebuje nějak manipulovat se samotnými tabulkami, je návrh aplikace chybně. (Ve většině případů; ve zbylých takový člověk ví, co dělá a nemusí se ptát.)

ALTER TABLE takovou klauzuli nemá, to zjistíš i proklikem do dokumentace
vomackav
Profil *
V dokumentaci jsem právě nic nenašel, proto se ptám jestli se to dá nějak pořešit nebo obejít.
Jde o to, že na začátku každého měsíce potřebuji do databáze přidat jeden sloupec po přihlášení admina do webové aplikace.
Chtěl jsem to řešit tak, že po přihlášení admina se vykoná dotaz:

ALTER TABLE tabulka ADD COLUMN novy_sloupec INT (2)

A pokud se admin během měsíce přihlásí znovu, potřebuji pořešit, aby nevznikla chyba při tom samém dotazu (sloupec už tam bude vložený od prvního přihlášení admina v měsící).

Nebyl by tedy nějaký tip jak na to?
Díky za nasměrování V.
juriad
Profil
Aha, má obava se potvrdila.
Některé časteji řešené dotazy pro MySQL - FAQ » Musíte pojmenovávat sloupce s indexem (jmeno1, jmeno2, jmeno3, …)

Raději přidej další tabulku, která bude mít v jednom sloupci datum (číslo měsíce) a v druhém hodnotu, kterou bys jinak ukládal do novy_sloupec.

To, jestli takový sloupec již existuje můžeš zjistit selectem do INFORMATION_SCHEMA. A podle jeho existence následně volat ADD COLUMN v dalším dotazu.
vomackav
Profil *
juriad:
To, jestli takový sloupec již existuje můžeš zjistit selectem do INFORMATION_SCHEMA. A podle jeho existence následně volat ADD COLUMN v dalším dotazu.

Toto jsem moc nepochopil, nemám s tím zkušenosti. Bylo by možné ukázat na příkladu?
Díky V.
Alphard
Profil
Neděláte to dobře. Zřejmě tomu zas tak moc nerozumíte, tak si nechte poradit, jdete na to z blbé strany. Strukturu je třeba řešit tak, aby přidání měsíce bylo realizováno přidáním řádku, nikoliv sloupce.

A na information_schema není nic složitého, jsou to normální tabulky, ze kterých lze cokoliv vytáhnout. Proklikejte si je v nějakém adminu a budete moudřejší. Aneb kdo se kam, pomozme mu tam.
vomackav
Profil *
Neříkám že tomu rozumím, jsem v databázích začátečník, tak se ptám, informuji, čtu...abych to udělal co nejefektivněji.
Můj problém spočívá s tom, že potřebuji každý měsíc přidat jeden sloupec a jemu přiřadit hodnotu podle výpisu z účtu.

Prosinec:
-> vytvořím sloupec prosinec_platba a jemu podle došlé platby přiřadím hodnotu 0 či 1

Jak jinak tento problém vyřešit?
Díky V.
Alphard
Profil
Dobře, řešme problém, jak to udělat lépe.
Zatím jste nenapsal žádné omezující podmínky, které by to komplikovaly :-) takže odpověď je jednoduchá.

Přidávejte řádek, jestli došla platba bude určeno dalším sloupcem. Název prosinec_platba není moc dobrý, doufám, že to nemáte v tabulce pojmenované platby_2013...

Takže si vytvoříte tabulku platby s následujícími sloupci:
id, mesic, rok, zaplaceno (vše bude číselné)

Příklad dat na prosinec:
22, 12, 2013, 1 (id 22 je auto_increment).
vomackav
Profil *
Nene, to nejsou pravé názvy, jen ilustrační.
Však toto je úplně jasné řešení, nevím proč tady vymýšlím nějaké komplikace.
Díky moc, Vašek
David12345
Profil *
Co takhle?

DELIMITER $$
CREATE PROCEDURE Alter_Table()
BEGIN
    DECLARE _count INT;
    SET _count = (  SELECT COUNT(*) 
                    FROM INFORMATION_SCHEMA.COLUMNS
                    WHERE   TABLE_NAME = 'tabulka' AND 
                            COLUMN_NAME = 'novy_sloupec');
    IF _count = 0 THEN
        ALTER TABLE tabulka
            ADD COLUMN novy_sloupec INT(2);
    END IF;
END $$
DELIMITER ;

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0