Autor Zpráva
quatzael
Profil
V databázi mám poměrně dost tabulek kde se nachází některé shodné sloupce (se stejnými názvy).

Potřeboval bych nějakým příkazem, pokud by to šlo, přenastavit všechny sloupce v celý databázi.

Tzn. dejme tomu, že v databázi se nachází 20 tabulek se sloupcem "column1" a já bych potřeboval, aby nějaký SQL příkaz vyhledal všechny tyto sloupce a u všech nastavil jednotný typ, velikost, popřípadě další vlastnosti..

Je na to nějaké jednoduché řešení?
Kajman
Profil
quatzael:
Je na to nějaké jednoduché řešení?

Ne. Budete si muset naprogramovat něco, co najde všechny tabulky s daným sloupcem a udělá postupně na každou zvlášť alter příkaz.

Myslím, že ruční změna 20 tabulek bude rychlejší :-)
peta
Profil
SHOW COLUMNS FROM `tablename` -- vytahne jmena sloupcu
http://stackoverflow.com/questions/4165195/mysql-query-to-get-column-names

SHOW TABLES; -- vytahne seznam tabulek

Kdyz to spojis nejak pres funkci...
Kajman
Profil
peta:

Ale kuš. Přeci nebude dělat pro každou tabulku dotaz na sloupce, když to jde jedním dotazem.
quatzael
Profil
Kajman:
Myslím, že ruční změna 20 tabulek bude rychlejší :-)
Jenže tam se nejedná jen o jeden sloupec, ale prakticky o cca stovku.. Navíc hledat ručně těch cca 20 tabulek, kde je zrovna ten daný sloupec, v X tabulkách mi taky nepřijde moc jako příjemně strávený čas..

Naprogramovat se mi to nezdá zase tak pracný jenom neumím to SQL..

Viděl bych to takhle nějak:

1. Příkaz SHOW TABLES - uložím si to do nějakýho pole
2. cyklem foreach projedu celý to pole a vždycky hodím podmínku, jestli daná tabulka obsahuje daný sloupec. když jo, provedu ten příkaz ALTER
jenikkozak
Profil
Co to máš za děsivou databázi? Proč ji nejprve nedáš do nějakého použitelného uspořádání?
quatzael
Profil
jenikkozak:
Co to máš za děsivou databázi?
Je tam toho holt hodně, no.. navíc tam ještě bude hafo podobných tabulek přibývat, takže bych potřeboval nějaký efektivnější způsob při upravování.. ten phpMyAdmin je děsně pomalej.

Proč ji nejprve nedáš do nějakého použitelného uspořádání?
To se teď právě snažím..
peta
Profil
Kajman: ? viz link na to forum, tam to je.

quatzael: Phpmyadnin zvlada vice sql dotazu najednou. Pouziva se to treba pri importu.
Proc chces menit zadani sloupcu? Stejne sloupce se vyvedou do externi tabulky a propoji ideckem. idecko je INT autoincrement, to neni treba menit. Nedava mi to prilis smysl.
Kajman
Profil
quatzael:
ten phpMyAdmin je děsně pomalej
Zkuste adminer.

Jenže tam se nejedná jen o jeden sloupec, ale prakticky o cca stovku.
Nastudujte si databázové normální formy a tabulky navrhněte tak, aby je splňovaly. Pak takové zběsilosti nebudou potřeba.

Link s ukázkou generovní alterů, které mají smysl.
http://php.vrana.cz/prevod-kodovani-mysql.php
quatzael
Profil
Kajman:
Přeci nebude dělat pro každou tabulku dotaz na sloupce, když to jde jedním dotazem.
Jo, tohle jsem moc nepochopil. Jak jedním dotazem..??

peta:
Stejne sloupce se vyvedou do externi tabulky a propoji ideckem. idecko je INT autoincrement, to neni treba menit. Nedava mi to prilis smysl.
Kajman:
Nastudujte si databázové normální formy a tabulky navrhněte tak, aby je splňovaly. Pak takové zběsilosti nebudou potřeba.

Tohle docela chápu. Ale nějak nevím jestli má cenu zacházet zase až do takových extrémů. Částečně to tak někde mám udělaný, ale předělávat celou databázi na tenhle systém mi nepříjde moc šikovný (to už je jednodušší přepsat ty sloupce)..

Navíc nějak mi jde proti srsti, abych měl v databázi potom 10krát až 100krát víc tabulek než teď.. To už bude totálně nepřehlednější. Navíc mít v jednom sloupci věci z různých kategorií se mi zdá taky nepraktický, jednak proto, že už se to nedá spravovat manuálně v tom phpMyAdmin, (Třeba kdybych chtěl z nějakého důvodu upravit jeden záznam) a pak ty dotazy do databáze jsou daleko pracnější..
peta
Profil
quatzael:
Myslel jsem klasicke propojeni tabulek pres id.
--- tab1 ---
id_tab1, id_tab2, id_tab3, nejaky text, datum
--- tab2 ---
id_tab2, text
--- tab3 ---
id_tab3, cislo, text, ip
Kdyz to potrebujes zmenit, zmenis to v tab2, tab3, do tab1 nemusis sahat.

"abych měl v databázi potom 10krát až 100krát víc tabulek než teď.. To už bude totálně nepřehlednější"
To zalezi na navrhu, optimalizaci. Muzes udelat treba 10 zakladnich tabulek pro data (id,cislo; id,text; id;blob) a do ostatnich to prenaset pres id. To je narust rekneme o 10 tabulek. Vyber a ukladani bude malinko slozitejsi, ale nebudes mit duplicitni zaznamy.
Kajman
Profil
quatzael:
Jak jedním dotazem..?
SELECT *
FROM   information_schema.columns
WHERE  column_name = 'column1'
quatzael
Profil
Kajman:
A tím teda získám rovnou všechny sloupce ze všech tabulek?
A jak na tenhle výběr navážu tím příkazem ALTER?

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: