Anglická verze
logolink

< Zpět na seznam lekcí

Lekce SQL a funkce

PHPObsah lekce:

  • Příkaz LIMIT
  • Příkaz LIKE
  • Agregační funkce (AVG, MAX, MIN, COUNT, SUM)
  • Příkaz GROUP BY
  • Funkce pro práci s datem a časem

SQL a funkce

V této lekci se seznámíme s některými dalšími příkazy a funkcemi, které můžeme použít v dotazech SELECT. Veškeré zde použité funkce budou vysvětllovány na příkladech s použitím databáze studentských novin, kterou jsme používali v minulých lekcích. Celou databázi si můžete stáhnout v souboru databaze.txt.

Příkaz LIMIT

Příkaz LIMIT využijeme nejčastěji v situaci, kdy máme rozsáhlou tabulku a chceme zobrazit pouze určitý počet záznamů (např. prvních 10 záznamů), nebo pokud chceme záznamy rozepsat na více stránek (např. stránkování seznamu článků po deeti článcích na stránku) - v tomto případě vypisujeme např. 10 záznamů od N-tého záznamu.

Obecný zápis příkazu LIMIT
       

obecný zápis:

LIMIT od, pocet

LIMIT pocet



výpis prvních 10 záznamů:

LIMIT 10

lze zapsat i jako LIMIT 0, 10



výpis záznamů 11 - 20:

LIMIT 10, 10



První příklad, který je uveden níže, zobrazí 10 nejčtenějších článků s počtem zobrazení (příkaz ORDER BY viewedcount DESC seřadí data dle počtu zobrazení sestupně a příkaz LIMIT 10 vybere prvních 10 záznamů).

Zobrazení deseti nejčtenějších článků (LIMIT)

SELECT heading, viewedcount

FROM renome_tarticle

ORDER BY viewedcount DESC

LIMIT 10

Prvních 10 nejčtenějších článků již máme zobrazeno. Nyní můžeme chtít zobrazit dalších 10 nejčtenějších článků, tj. 11. - 20. nejčtenější článek. Zde je nutné pouze upravit příkaz LIMIT a rozšířit jej o jeden číselný parametr (LIMIT od, pocet), tedy LIMIT 10, 10.

Zobrazení 11. - 20. nejčtenějšího článku

SELECT heading, viewedcount

FROM renome_tarticle

ORDER BY viewedcount DESC

LIMIT 10, 10

Příkaz LIKE

Příkaz LiKE se nejčastěji používá v dotazech SELECT u příkazu WHERE, který slouží pro výběr záznamů splňujících danou podmínku. V případě, že vyhledáváme textová data a používáme operátor porovnání je nutné zadat přesný text. Někdy je však potřeba podmínku stanovit trochu obecněji (např. články, jejichž nadpis začíná na písmeno P, nebo články obsahující nějaký odkaz). Pro tento účel slouží příkaz LIKE, kde nalevo od tohoto příkazu je jméno pole a napravo výraz definující hledanou hodnotu. V tomto výrazu lze využít speciální znaky dle následující tabulky.

ZnakVýznam
%Nahrazuje libovolný počet libovolných znaků
_Nahrazuje jeden libovolný znak
[]Rozsah znaků (např. [1-5] pro jedno číslo v rozsahu 1 - 5)

Po přehledu základních možností zápisu je vhodné uvést několik příkladů. První příklad bude sloužit pro výběr článků, jejichž název začíná na písmeno "P".

Zobrazení všech článků, jejichž nadpis začíná na písmeno P

SELECT heading

FROM renome_tarticle

WHERE heading LIKE 'P%'

Ve druhém příkladu budou vybrány články, v jejichž textu je nějaký odkaz, tj. HTML tag a s nastavenou vlastností href (hledáme text, který obsahuje slovo href).

Zobrazení článků, v jejichž textu je nějaký odkaz

SELECT heading

FROM renome_tarticle

WHERE text LIKE '%href%'

Agregační funkce a příkaz GROUP BY

Agregační funkce

Agregační funkce slouží pro práci s hodnotami v určité množině záznamů. Nejčastěji používané funkce jsou popsány v následující tabulce.

FunkcePopis
AVG()Aritmetický průměr
MIN()Minimální hodnota
MAX()Maximální hodnota
COUNT()Počet hodnot
SUM()Součet hodnot

Následující dva příklady demonstrují použití funkce AVG() pro zjištění průměrného počtu zobrazených článků a funkce SUM() pro zjištění celkového počtu zobrazených článků (součet hodnot). Použití dalších funkcí z výše uvedeného seznamu je založeno na stejném principu.

Zobrazení čísla, které vyjadřuje průměrný počet zobrazení článku

SELECT AVG(viewedcount)

FROM renome_tarticle

Zobrazení čísla, které vyjadřuje celkový počet zobrazení článků

SELECT SUM(viewedcount)

FROM renome_tarticle

Příkaz GROUP BY

Výše popsané agregační funkce se nejčastěji používají společně s příkazem GROUP BY. Tento příkaz slouží k seskupování hodnot dle určitého kritéria. U každé takto seskupené hodnoty můžeme pomocí agregačních funkcí zjistit například počet hodnot v každé kategorii.

Zobrazení jednotlivých sekcí a počtu článků v nich

SELECT name, COUNT(*)

FROM renome_tarticle

INNER JOIN renome_ccathegory ON renome_tarticle.idccathegory = renome_ccathegory.idccathegory

GROUP BY renome_tarticle.idccathegory

Funkce pro práci s datem a časem

FunkcePopis
DATEDIFF(datum1, datum2)Rozdíl dvou dat ve dnech
CURDATE()Aktuální datum
DAY()Den
MONTH()Měsíc
YEAR()Rok
TIMEDIFF(čas1, čas2)Rozdíl dvou časů (ve formátu času)
CURTIME()Aktuální čas
HOUR()Hodiny
MINUTE()Minuty
SECOND()Sekundy

V prvním příkladu je použit dotaz pro zobrazení seznamu článků a jejich stáří ve dnech. Pro zjištění stáří ve dnech je použita funkce DATEDIFF, která zjistí rozdíl mezi aktuálním datem (funkce CURDATE) a datem uvedeným ve sloupci createdate.

Zobrazení seznamu článků a jejich stáří ve dnech

SELECT heading, createdate, 

DATEDIFF(CURDATE(), createdate)

FROM renome_tarticle

Dotaz ve druhém příkladě slouží pro výběr článků ze září 2009. Funkce pro práci s datem a časem jsou použity v podmínce WHERE, kde je z data ve sloupci createdate vybrán měsíc pomocí funkce MONTH a rok pomocí funkce YEAR. Měsíc je porovnán s hodnotou 9 (září) a rok s hodnotou 2009. Pro spojení těchto porovnání slouží logický operátor AND (a zároveň).

Zobrazeníčlánků ze září 2009

SELECT heading, createdate 

FROM renome_tarticle 

WHERE (MONTH(createdate)=9 and YEAR (createdate)=2009)

Další čtení

Odkazy

Otázky

  1. K čemu slouží v jazyku SQL příkaz GROUP BY a jaké znáte agregační funkce?
  2. Jak je v příkazu SELECT možné použít příkaz LIMIT?
  3. Jaké znáte SQL funkce pro práci s datem a časem?
webdesign, xhtml, css, php - Mgr. Michal Mikláš