Osobní stránky

Kouzla s MySQL funkcí CONCAT

Během vývoje programů se mi občas stává, že potřebuji rychle vybrat data z databáze v přesném formátu pro další zpracování. Nejčastějším případem, který se mi v poslední době stává je, že potřebuji převést data do určité formy. Nedávno jsem například potřeboval převést data z MySQL tabulky do pole v PHP. Jako klíč pole měly být uvedeny hodnoty jednoho sloupce z databáze a jako hodnoty pole data z jiného sloupce.

Příklad vytvoření pole v PHP:

$array = array();
$array["key"] = "value";

Celé pole by šlo vytvořit ručně pomocí vybrání dat z databáze a postupného upravování příkladu uvedeného výše.

Lepší a především rychlejší postup pro vytvoření takového pole je použít MySQL funkci CONCAT. Tato funkce slouží ke spojení dvou a více řetězců. Použití je v našem případě následující:

SELECT CONCAT('$array["', `key`, '"] = "', `value`, '";') 
FROM `table`;

Tento příkaz vygeneruje pro každý řádek z tabulky `table` odpovídající příkaz pro vytvoření pole v PHP. Nad vygenerovaný kód stačí přidat pouze řádek pro inicializaci prázdného pole. Tento postup lze použít pro jakýkoliv programovací jazyk, stačí pouze upravit kód podle zvyklostí daného programovacího jazyka.

Funkce CONCAT bere neomezený počet argumentů a ty spojí dohromady. Pomocí tohoto triku lze vytvářet nové záznamy pro vložení do databáze. Hodí se především pro rychlé zálohování určitých dat.

SELECT CONCAT('("', `value1`, '", "', `value2`, '", "', `value3`, '"),') 
FROM `table`;

Tento příkaz vygeneruje posloupnost hodnot, které chceme do tabulky vložit. Pokud před tento příkaz zadáme:
INSERT INTO `table` (`column1`, `column2`, `column3`) VALUES a na konci nahradíme čárku za středník, máme připravený kód pro vložení dat do databáze.

Lze jednoduše určit i které sloupečky budou ve výsledném kódu a je také možné spojovat více tabulek a filtrovat konkrétní záznamy. Tento postup tedy může být užitečný i při změně databázové struktury, pokud potřebujeme přesunout data do nových tabulek.

Funkce CONCAT je k dispozici v databázi MySQL. V databázi PostgreSQL se ke spojování hodnot používá operátor: ||. Například: 'test-' || '1'. Při používání databáze Oracle lze ke spojování hodnot použít obě možnosti: funkci CONCAT i operátor ||.

Možnosti využití funkce CONCAT jsou obrovské. Kromě výše zmíněných možností lze připravit jednoduchý export dat do různých formátů (např. CSV), převod do jiných formátů nebo ke spojování různých sloupců.

Jakub Škvára


Jakub je cestovatel, blogger a webový vývojář. Zajímá se především o technické novinky a rád navštěvuje konference. Používá: Symfony2 Framework, AngularJS, NodeJS, MongoDB a další moderní technologie. Aktuálně žije v Londýně.