Autor | Zpráva | ||
---|---|---|---|
vomackav Profil * |
#1 · Zasláno: 21. 11. 2013, 21:09:35
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 |
#2 · Zasláno: 21. 11. 2013, 21:16:53
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 * |
#3 · Zasláno: 21. 11. 2013, 21:27:56
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 |
#4 · Zasláno: 21. 11. 2013, 21:33:00
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. |
||
Časová prodleva: 5 dní
|
|||
vomackav Profil * |
#5 · Zasláno: 26. 11. 2013, 21:51:21
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 |
#6 · Zasláno: 26. 11. 2013, 22:04:53
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 * |
#7 · Zasláno: 26. 11. 2013, 22:20:24
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 |
#8 · Zasláno: 26. 11. 2013, 22:44:07
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 * |
#9 · Zasláno: 27. 11. 2013, 07:59:30
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 * |
#10 · Zasláno: 27. 11. 2013, 12:20:54
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 ; |
||
Časová prodleva: 10 let
|
0