MySQL – řazení dle písmen a číslic

MySQL - řazeníPro aplikaci vytvářenou na operační systém Android jsem potřeboval zajistit výpis ze vzdáleného serveru. Vytvořil jsem si proto příslušný PHP skript, který měl za úkol vypsat z databáze názvy dostupných seriálů, ty přeměnit do formátu JSON a předat je na stranu klienta v podobě chytrého mobilního telefonu, který tato data následně použije a zobrazí. Problém překvapivě nastal během vytváření dotazu. Ten jsem klasicky v jeho závěru obohatil o klauzuli ORDER BY a byl poněkud zklamán výsledkem. Chování přesně odpovídalo ASCII tabulce, což znamená, že se nejprve objevily seriály začínající číslicí a teprve poté následovaly položky obsahující na první pozici písmeno. Osobně mi připadá přirozenější obrácené pořadí, a proto jsem začal hledat způsob, jak takového cíle dosáhnout.

Po chvíli jsem narazil na řešení spočívající v nasazení dvou řadících operací zároveň. Ve stejné době mi došlo, jakým způsobem budou řetězce složené z čísel interpretovány. Máme-li například trojici 1, 2, 10, objeví se jako 1, 10, 2, protože ctí pravidla pro zacházení s textem. K převodu na číslo poslouží trik, který znám z JavaScriptu. Jednoduše stačí provést číselnou operaci, jenž nezmění výsledek, tedy například vynásobení jedničkou nebo přičtení nuly.

Vraťme se ale nyní k samotnému seřazení. Nejprve zaměníme pořadí u řádků na základě převodu zvolené hodnoty na číslo. Druhá část řazení následuje ihned poté, tentokrát však již bere v potaz textovou reprezentaci. Hotový dotaz v mém případě vypadal takto:

SELECT * FROM shows ORDER BY (name * 1) ASC, name ASC

Jak již vás patrně napadá, sloupec name udržoval název daného seriálu, shows naopak slouží k identifikaci celé tabulky.

Stane-li se, že pořadí písmen následovaných číslicemi nevyhovuje, stačí jednoduše vyměnit obě součásti klauzule ORDER BY:

SELECT * FROM shows ORDER BY name ASC, (name * 1) ASC

Nyní výpis v čele ovládnou číselné údaje s plynulým navázáním záznamů, kde se první znak nese v duchu písmena.

Seznam českých podstatných jmen

Seznam podstatných jmenK naplnění podstaty jednoho mého projektu jsem potřeboval získat poněkud specifická data – česká podstatná jména v prvním pádě. Nejprve jsem předpokládal, že podobný seznam musím s pomocí webového vyhledávače nalézt. Bohužel jsem však narážel pouze na nefunkční odkazy. Postupně jsem se proto smiřoval s faktem, že kýžený soupis budu vytvářet na vlastní pěst. Mé myšlenky směřovaly k využití nejrůznějších slovníků používaných pro kontrolu pravopisu a tento nápad mi následně potvrdil i jeden tip, jenž jsem během procházení internetu objevil.

Problémy nečiní ani jiné slovní druhy

K získání seznamu nejprve zamiřte na www.openoffice.cz, kde stáhnete český slovník ve formátu oxt. U souboru následně zaměňte koncovku na zip a použijte libovolný dekomprimační nástroj. Uvnitř archívu čeká několik souborů, z nichž pro nás momentálně nejzajímavější nese označení cs_CZ.dic. Doporučuji se rovněž seznámit s přiloženou licencí. Zmíněný souhrn pochází původně ze slovníku pro ispell a přichází s formátem, jenž umožňuje identifikovat kýžené objekty zájmu. Pro tento účel jsem vytvořil jednoduchý skript v PHP, jenž celý soubor postupně projde a vybere pouze ta slova, o které má daný uživatel skutečně zájem. V mém případě šlo o řádky, jenž za symbolem lomítka (/) obsahovaly buď znak H nebo Z.

$lines = file("./cs_CZ.dic");
$fileName = "podstatna_jmena.txt";
for($i = 0 ; $i < count($lines); $i++)
{
 $currentLine = explode("/", $lines[$i]);
 if( (strpbrk($currentLine[1], "HZ") != false) )
 {
 file_put_contents($fileName, $currentLine[0]."\n", FILE_APPEND);
 }
}

Nejprve jsem celý obsah slovníku s pomocí funkce file proměnil na pole. Následovalo jeho procházení s pomocí klasického iteračního cyklu. Na každý řádek byla aplikována snaha o jeho rozdělení na dvě poloviny díky explode. Pokud funkce strpbrk nalezla kýžený písmenný znak, dovolila provést zápis do druhého pomocného souboru. Po ukončení činnosti scriptu jeho obsah tvořily pouze slovní druhy, o něž skutečně stojíte – zde tedy konkrétně výhradně podstatná jména. Jejich předání dalšímu programu či scriptu následně již nic nezabrání.

Plaťte VPS na základě reálně využitého výkonu

VPS
Narazil jsem na zajímavou službu, která se výrazně liší od podobných produktů svého typu. Na portále 4smart.cz během prvního pohledu nespatříte nic neobvyklého. Klasická nabídka virtuálního serveru s operačním systémem založeným na Linuxu. Možnost individuální konfigurace jednotlivých parametrů s pomocí posuvníků pochopitelně nesymbolizuje nijak nestandardní vlastnost objednávkového formuláře. První podivování začíná v sekci zabývající se finanční náročností. Přednastavená varianta VPS sice vychází pouze na 16 Kč, přináší však s sebou odpovídající výkon. Poprvé jsem se pousmál i u rozpočítání nákladů. Ty zobrazují cenu za běh serveru v časovém horizontu pěti minut, hodiny a celého dne. Jak jsem následně pochopil, právě netypické účtování může zajistit proklamovanou peněžní úsporu.

Optimalizovanou aplikaci si zamilujete

Firma si strhává pravidelný poplatek za běh VPS každých pět minut. Suma ovšem není předem určená, závisí totiž na aktuálně využitých systémových prostředcích. Pakliže například bude RAM paměť zahálet, projeví se to na stavu konta. K ochraně před nečekaně vysokým účtem z nejrůznějších softwarových příčin slouží prvotní stanovení maximálního hardwarového výkonu. I když se proto některý proces odmítne ukončit a bude pokračovat v již zbytečné činnosti, nezruinuje peněženku svého majitele. Z popsaných důvodů na důležitosti získávají weby a programy spoléhající na dostupné prostředky optimální formou. Společnost uvádí, že si může dovolit nasadit nižší ceny, protože se její klienti z logických příčin snaží omezovat zbytečný výkon, což značí menší náklady spojené s provozováním služby.

Flexibilní řešení

Osobně si dokáži představit pořízení VPS k nejrůznějším testovacím účelům. Zanikají starosti s nedostatečným výkonem, protože ten je vždy připraven v záloze. V době jeho nevyužití naopak přichází na řadu minimální poplatky.