<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT blog &#187; MySQL</title>
	<atom:link href="http://szj.cz/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://szj.cz</link>
	<description>internet, linux, novinky, programování</description>
	<lastBuildDate>Sat, 12 Sep 2015 11:14:32 +0000</lastBuildDate>
	<language>cs-CZ</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>Proměnné v MySQL aneb používáme alias v SELECT dotazu</title>
		<link>http://szj.cz/promenne-v-mysql-aneb-pouzivame-alias-v-select-dotazu/</link>
		<comments>http://szj.cz/promenne-v-mysql-aneb-pouzivame-alias-v-select-dotazu/#comments</comments>
		<pubDate>Mon, 01 Jul 2013 16:16:33 +0000</pubDate>
		<dc:creator><![CDATA[fredomgc]]></dc:creator>
				<category><![CDATA[Programování]]></category>
		<category><![CDATA[AS]]></category>
		<category><![CDATA[databáze]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[proměnná]]></category>
		<category><![CDATA[SELECT]]></category>

		<guid isPermaLink="false">http://szj.cz/?p=769</guid>
		<description><![CDATA[Narazil jsem na výbornou syntaktickou pomůcku v MySQL, která mi okamžitě začala zjednodušovat život. Stává se mi totiž, že potřebuji s hodnotou jednoho sloupce pracovat v jiném sloupci. Při použití standardních aliasů vytvořených s pomocí AS však narážím na problém. Následující metoda představuje přímočarý postup, který však není funkční. Databáze u druhého sloupce ukončí provádění [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Narazil jsem na výbornou syntaktickou pomůcku v MySQL, která mi okamžitě začala zjednodušovat život. Stává se mi totiž, že potřebuji s hodnotou jednoho sloupce pracovat v jiném sloupci. Při použití standardních aliasů vytvořených s pomocí AS však narážím na problém.</p>
<p>Následující metoda představuje přímočarý postup, který však není funkční.</p>
<p>SELECT (1 + 1) as soucet, soucet + 1</p>
<p>Databáze u druhého sloupce ukončí provádění dotazu s tím, že nezná <strong>soucet</strong>, i když se jedná o alias předcházejícího sloupce.</p>
<p>Kýženého efektu dosáhneme díky proměnným. Těm se přiřazují hodnoty zápisem <strong>@jmeno:=hodnota</strong>. Aktuálně uchovávaný údaj vrátí <strong>@jmeno</strong>. Výše uvedený příklad by po nasazení proměnných vypadal takto:</p>
<p>SELECT @soucet:=(1 + 1) as soucet, @soucet + 1</p>
<p>Rázem získáváme číslo 2 a v druhém sloupci správný součet 3.</p>
<p><a href="http://szj.cz/wp-content/uploads/2013/07/mysql-promenne.png"><img class="aligncenter size-full wp-image-771" title="mysql-promenne" src="http://szj.cz/wp-content/uploads/2013/07/mysql-promenne.png" alt="MySQL - proměnné" width="555" height="208" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://szj.cz/promenne-v-mysql-aneb-pouzivame-alias-v-select-dotazu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL: Řazení sloupce s NULL hodnotami</title>
		<link>http://szj.cz/mysql-razeni-sloupce-s-null-hodnotami/</link>
		<comments>http://szj.cz/mysql-razeni-sloupce-s-null-hodnotami/#comments</comments>
		<pubDate>Sun, 27 Jan 2013 14:11:59 +0000</pubDate>
		<dc:creator><![CDATA[fredomgc]]></dc:creator>
				<category><![CDATA[Programování]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[řazení]]></category>

		<guid isPermaLink="false">http://szj.cz/?p=573</guid>
		<description><![CDATA[Nedávno jsem potřeboval seřadit tabulku podle sloupce, jenž zastupoval cenu. Ne vždy však byl tento údaj vyplněn a objevovaly se proto i hodnoty NULL. To by nevadilo, pokud bych vyžadoval sestupné pořadí, tedy od největší ceny po nejmenší. Řádky s NULL by se v tomto případě ukázaly poslední. Já však toužil po přesném opaku. Jako [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://szj.cz/wp-content/uploads/2012/10/mysql-razeni.png"><img class="alignleft size-full wp-image-449" title="mysql-razeni" src="http://szj.cz/wp-content/uploads/2012/10/mysql-razeni.png" alt="MySQL - řazení" width="128" height="128" /></a>Nedávno jsem potřeboval seřadit tabulku podle sloupce, jenž zastupoval cenu. Ne vždy však byl tento údaj vyplněn a objevovaly se proto i hodnoty NULL. To by nevadilo, pokud bych vyžadoval sestupné pořadí, tedy od největší ceny po nejmenší. Řádky s NULL by se v tomto případě ukázaly poslední. Já však toužil po přesném opaku. Jako první se měla projevit nejmenší cena. Tvrdohlavě však tuto příčku okupovaly hodnoty NULL a donutily mě začít hledat chytré řešení.</p>
<p>Vše lze pohodlně vyřešit s pomocí dotazu. Ten vypadá následovně:</p>
<p>SELECT cena FROM tabulka ORDER BY case when cena is null then 1 else 0 end, cena</p>
<p>Nejzajímavější je pochopitelně klauzule ORDER BY. S pomocí case vytvořím jednoduchou podmínku, jenž nahradí NULL za 1. Vyplněné ceny naopak zaměním za 0. Nyní jsem docílil toho, že řádky s NULL se ve výpisu objeví jako poslední. To odpovídá seřazení nul a jedniček dle defaultního (neuvedeného) vzestupného pořadí. Následně již zbývá vykonat poslední krok. Postarat se o správné začlenění řádků s uvedenou (neprázdnou) hodnotou. To je již velmi jednoduché, stačí do klauzule ORDER BY dosadit druhý sloupec (v mém konkrétním případě pojmenovaný jako cena). Ten si rovněž automaticky vyžádá vzestupné pořadí. Výsledkem je kýžený seznam s nejnižším číslem na svém počátku.</p>
]]></content:encoded>
			<wfw:commentRss>http://szj.cz/mysql-razeni-sloupce-s-null-hodnotami/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL – řazení dle písmen a číslic</title>
		<link>http://szj.cz/mysql-razeni-dle-pismen-a-cislic/</link>
		<comments>http://szj.cz/mysql-razeni-dle-pismen-a-cislic/#comments</comments>
		<pubDate>Mon, 15 Oct 2012 16:48:03 +0000</pubDate>
		<dc:creator><![CDATA[fredomgc]]></dc:creator>
				<category><![CDATA[Programování]]></category>
		<category><![CDATA[databáze]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[řazení]]></category>
		<category><![CDATA[řazení dat]]></category>

		<guid isPermaLink="false">http://szj.cz/?p=448</guid>
		<description><![CDATA[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 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://szj.cz/wp-content/uploads/2012/10/mysql-razeni.png"><img class="alignleft size-full wp-image-449" title="mysql-razeni" src="http://szj.cz/wp-content/uploads/2012/10/mysql-razeni.png" alt="MySQL - řazení" width="128" height="128" /></a>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 <strong>ORDER BY</strong> a byl poněkud zklamán výsledkem. Chování přesně odpovídalo <a href="http://cs.wikipedia.org/wiki/ASCII">ASCII</a> 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.</p>
<p>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 <strong>1, 2, 10</strong>, objeví se jako <strong>1, 10, 2</strong>, 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.</p>
<p>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:</p>
<p>SELECT * FROM shows ORDER BY (name * 1) ASC, name ASC</p>
<p>Jak již vás patrně napadá, sloupec <strong>name</strong> udržoval název daného seriálu, <strong>shows</strong> naopak slouží k identifikaci celé tabulky.</p>
<p>Stane-li se, že pořadí písmen následovaných číslicemi nevyhovuje, stačí jednoduše vyměnit obě součásti klauzule<strong> ORDER BY</strong>:</p>
<p>SELECT * FROM shows ORDER BY name ASC, (name * 1) ASC</p>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://szj.cz/mysql-razeni-dle-pismen-a-cislic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Počet aktuálně přihlášených uživatelů v PHP</title>
		<link>http://szj.cz/pocet-aktualne-prihlasenych-uzivatelu-v-php/</link>
		<comments>http://szj.cz/pocet-aktualne-prihlasenych-uzivatelu-v-php/#comments</comments>
		<pubDate>Sat, 30 Jun 2012 13:42:25 +0000</pubDate>
		<dc:creator><![CDATA[fredomgc]]></dc:creator>
				<category><![CDATA[Programování]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[přihlášení uživatelé]]></category>

		<guid isPermaLink="false">http://szj.cz/?p=317</guid>
		<description><![CDATA[Nedávno jsem přemýšlel, jak vyřešit zobrazování počtu osob, které se na určitou stránku přihlásily do členské sekce. Mé první myšlenky směřovaly k ukládání záznamu do databáze. Pokud bych však vytvořil speciální sloupec například typu ENUM, kde bych ukládal dva stavy (PRIHLASEN, NEPRIHLASEN), dostal bych se záhy do problémů. Údaje bych totiž mohl měnit jen na [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://szj.cz/wp-content/uploads/2012/06/php.png"><img class="alignleft size-full wp-image-318" title="php" src="http://szj.cz/wp-content/uploads/2012/06/php.png" alt="PHP" width="128" height="128" /></a>Nedávno jsem přemýšlel, jak vyřešit zobrazování počtu osob, které se na určitou stránku přihlásily do členské sekce. Mé první myšlenky směřovaly k ukládání záznamu do databáze. Pokud bych však vytvořil speciální sloupec například typu <strong>ENUM</strong>, kde bych ukládal dva stavy (<strong>PRIHLASEN</strong>, <strong>NEPRIHLASEN</strong>), dostal bych se záhy do problémů. Údaje bych totiž mohl měnit jen na základě provedení vhodné činnosti ze strany uživatele. Lidé však pochopitelně nemusí vždy postupovat tak, jak zamýšlel programátor. Mluvím konkrétně o odhlášení ze systému. Pokud by někdo jednoduše stránku zavřel, nelze změnit stav na <strong>NEPRIHLASEN</strong> a počítadlo aktivních uživatelů postupně přestane zobrazovat reálná data. Na následujících řádcích vám proto představím mnohem lepší řešení, které se nastíněnou situací počítá.</p>
<h2>Úprava databáze</h2>
<p>Nejprve bude potřeba pozměnit lehce strukturu tabulky, která uchovává informace o uživatelích. Přidejte sloupec <strong>LastTimeSeen</strong> datového typu <strong>DATETIME</strong>.</p>
<h2>Poslední krok &#8211; PHP</h2>
<p>Nyní si napíšeme několik řádků kódu, které obstarají aktualizaci údaje v databázi. Uložíme si přitom aktuální datum i čas.</p>
<pre class="brush: php; title: ; notranslate">$sql = &quot;UPDATE uzivatele SET LastTimeSeen = NOW() WHERE id = &quot;.$_SESSION[&quot;id&quot;];

mysql_query($sql);</pre>
<p>S pomocí <strong>NOW()</strong> máme zajištěno aktuální časové razítko. Obměnu záznamu pochopitelně provedeme jen v případě konkrétního id.</p>
<p>Nyní již disponujeme všemi nezbytnostmi ke spočítání přihlášených uživatelů. Postačí nám přitom jediný dotaz, jehož výsledek jen vypíšeme:</p>
<p>SELECT COUNT(*) FROM uzivatele WHERE LastTimeSeen > DATE_SUB(NOW(), INTERVAL 5 MINUTE)</p>
<p>Pojďme se blíže zaměřit na klauzuli WHERE. Hledáme jen ty řádky, v nichž sloupec LastTimeSeen je větší než čas před pěti minutami. Právě <strong>DATE_SUB</strong> slouží k odečtení vybraného intervalu. V našem případě provádíme rozdíl aktuálního časového razítka <strong>NOW()</strong> od pěti minut (<strong>INTERVAL 5 MINUTE</strong>).</p>
<p>Názorný příklad bude patrně jasnější. V 14:00 nám <strong>DATE_SUB(NOW(), INTERVAL 5 MINUTE)</strong> vrátí např. 2012-06-27 <strong>13:55</strong>:24.</p>
<p>Agregační funkce <strong>COUNT</strong> poté spočítá vyhovující záznamy. Právě toto číslo představuje momentálně aktivní uživatele.</p>
]]></content:encoded>
			<wfw:commentRss>http://szj.cz/pocet-aktualne-prihlasenych-uzivatelu-v-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
