© 2013 All rights reserved.
3

PHP&MySQL: prohození sloupců v tabulce

Občas nastane situace, kdy potřebujeme použít funkci v databázi, kterou databáze standardně neumožňuje. Příkladem toho může být například prohození dvou sloupců v tabulce.

Situace, kdy potřebujete prohodit dva sloupce v databázi, nenastane denně, ale může se stát, že nastane. Tuto funkci standardně MySQL nenabízí, nebo jsem ji alespoň nenašel.

V takové situaci si musíte pomoci sami a danou funkci si doprogramovat.

Nebudu rozebírat strukturu databáze, a ani to, zda by nešla taková databáze lépe navrhnout. Stalo se to, že tuto funkci v databázi potřebuji.

Postup pro prohození sloupců jsem zvolil:

  • překontrolování struktury
  • vytvoření pomocného sloupce na místě, kam chci nový sloupce přesunout
  • překopírování dat z prvního sloupce do pomocného sloupce
  • smazání prvního sloupce
  • přejmenování pomocného sloupce na jméno prvního sloupce

Třídu, kterou si naprogramujeme, bude korektně umožňovat prohození pouze dvou sloupců vedle sebe. V praxi by jsme mohli prohazovat i sloupce, které nejsou hned vedle sebe, ale v konečném výsledku by se stejně prohodil první sloupec hned za druhý. Každopádně by nebyl problém třídu upravit i na jiný způsob prohození.

Vstupní parametry v konstruktoru budou název tabulky, název prvního sloupce a název druhého sloupce.

Kontrola struktury

Jelikož se jedná o operaci, kdy budeme měnit strukturu tabulky a budeme pracovat s daty je nutné tabulku před samotnou operací překontrolovat. Musíme zkontrolovat, zda obsahuje námi zadané názvy sloupců a navíc, pokud již budeme zjišťovat strukturu tabulky si zjistíme typ prvního sloupce, abychom mohli vytvořit pomocný sloupec stejného typu.

Ve všech metodách budeme předpokládat, že existují globální proměnné, uložené v konstruktoru:

Takže provedeme kontrolu:

Vytvoření pomocného sloupce

Při kontrole tabulky jsme si zjistily typ prvního sloupce a uložili do proměnné. Nyní můžeme jednoduše vytvořit pomocný sloupec, který umístíme za sloupec, který je při přesouvání v pořadí druhý. Leží vpravo:

Překopírování dat

Pokud je vytvořený pomocný sloupec, tak je nutné sem překopírovat data z prvního sloupce, abychom mohli první sloupec smazat. Toto uděláme jednoduše jedním sql dotazem:

Smazání prvního sloupce a přejmenování pomocného

Pokud je vše hotovo, stačí už jenom smazat první sloupec a přejmenovat pomocný sloupec jménem prvního:

Celou třídu můžeme doplnit o zamykání tabulek, nebo jiné zabezpečení.
Nakonec opět celý kód:

Comments are closed for this page

alter table `tabulka` modify column `sloupec1` varchar(150) after `sloupec2`;

varchar(150) je nutne nahradit typem sloupce1
🙂

Diky,
proc delat neco jednoduse, kdyz to jde slozite.
Stejne se divim, ze me tohle nenapadlo.

tak tohle je krutec:-) doporucuju pouzit prikaz alter, viz prvni prispevek.

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836