Jazyk MQL

 
V tomto příspěvku se dozvíme:

Úvod

Filtrovali jste někdy produkty nebo vytvářeli výběry v Mergado Editoru na stránce Produkty?

image

Nebo jste třeba cílili na hodnoty parametrů v rámci cesty k elementu? Pokud jste odpověděli “ano” alespoň na jednu z výše uvedených otázek, pak můžete s jistotou říct, že jste se setkali právě s MQL.

Co je MQL?

MQL je zkratkou pro Mergado Query Language (česky Mergado dotazovací jazyk). Jedná se o jazyk, jehož autorem jsme my (Mergado) a pomocí kterého se zapisují podmínky.

Co je podmínka (v MQL)?

Když si filtrujeme produkty na stránce Produkty, filtrujeme podle podmínky. Takže zadáme podmínku, podle které se má filtrovat, a po vyhledání produktů se nám zobrazí pouze takové produkty, které splňují námi zadanou podmínku.

:information_source:  V Mergado Editoru existují 2 způsoby zobrazení podmínek a oba dva způsoby jsou ve výsledku v MQL:

1. Jednoduchý formulář výběrů, nazývaný též Oneliner, zobrazuje podmínku na jednom řádku se třemi poli pro naklikání podmínky.

Oba způsoby zobrazení podmínky jsou si rovnocenné. Tedy např. pokud si v Onelineru vytvoříme podmínku ITEM_ID = 43 nebo ve formuláři pro Vlastní MQL dotaz napíšeme ITEM_ID = 43, výsledek po vyhledání produktů bude totožný.

Jelikož je MQL jazyk, tak i MQL, jako běžné jazyky, má svoji slovní zásobu (termíny, které se dají používat v podmínkách) a gramatiku (soubor pravidel, jak se podmínky píší).

Slovní zásoba a gramatika MQL

V této sekci si vysvětlíme všechny možnosti a omezení MQL. V průběhu budeme hojně používat přirovnání k českému jazyku – podmínka v MQL má totiž jisté podobnosti s jednoduchou větou v českém jazyce.

Podmínka se skládá ze 3 částí

Podmínka je základním stavebním prvkem MQL a skládá se ze 3 částí:

image

Do 1. části se píše cesta k elementu - v českém jazyce si můžeme představit podmět.

Do 2. části se píše operátor - v českém jazyce si můžeme představit přísudek. K dispozici máme následující operátory:

Operátor Význam
CONTAINS obsahuje text
NOT CONTAINS neobsahuje text
= je rovno
!= není rovno
~ obsahuje regulární výraz
!~ neobsahuje regulární výraz
< je menší
<= je menší nebo rovno
> je větší
>= je větší nebo rovno
IN je obsažen ve výčtu
NOT IN není obsažen ve výčtu

 
Do 3. části se píše buď hodnota (číselná/textová), cesta k elementu, nebo regulární výraz – v českém jazyce si můžeme představit třeba předmět (nebo cokoliv mimo podmět a přísudek). Textová hodnota a regulární výraz se musí psát do uvozovek, např. "tričko". Číselná hodnota se do uvozovek psát nemusí.

DESCRPTION CONTAINS “tričko”

:information_source:  Uvozovky musí být ty "rovné" a ne ty “křivé”, jinak podmínka nebude validní. Křivost uvozovek může být způsobena např. formátováním různých editorů a prohlížečů v případě, když bychom danou cestu k elementu odněkud kopírovali (třeba z našeho fóra).

“rovné” a “křivé”

První část podmínky nám říká, “kam koukáme” v rámci produktů – koukáme do elementu (a jeho hodnot) zacíleného v dané cestě. 2. a 3. část podmínky nám společně říkají, “jak koukáme” na element zacílený v 1. části podmínky – koukáme skrze takové “brýle”, které nám umožňují vidět jenom takové hodnoty elementu, které vyhovují podmínce. Např. s podmínkou ITEM_ID = 43 se vyhledají pouze takové produkty, které mají v elementu ITEM_ID hodnotu rovnu 43.

V 1. a 3. části se při použití cesty k elementu musí elementy psát do hranatých závorek [ ], pokud názvy daných elementů obsahují znaky jiné než písmena bez diakritiky a číslice, např. mezeru. Výjimkou jsou speciální atributy a zobrazení Oneliner.

f1cc26bf4ef05653fb8470ce2dabbcc0f1861618

:information_source:  Hranaté závorky [ ] se na české klávesnici píší klávesovými zkratkami pravý Alt + F a pravý Alt + G nebo také pravý Alt + ú a pravý Alt + ).

Spojování podmínek

Podmínky se dají spojovat (podobně jako věty se dají spojovat do souvětí) pomocí spojovacích operátorů (podobně v češtině spojky). V MQL existují 2 takové operátory:

  • AND, které znamená “a zároveň”,
    např. ITEM_ID = 43 AND DESCRIPTION CONTAINS "tričko" znamená, že hledáme produkty, které mají ITEM_ID rovnu 43 a zároveň DESCRIPTION obsahující text “tričko”, tedy produkt musí vyhovovat oběma podmínkám.

    9738764c0a6cbcd078b405fde41a96a28c8307eb

  • OR, které znamená “nebo”,
    např. ITEM_ID = 43 OR DESCRIPTION CONTAINS "tričko" znamená, že hledáme produkty, které mají ITEM_ID rovnu 43 nebo DESCRIPTION obsahující text “tričko”, tedy stačí, aby produkt vyhovoval pouze jedné z podmínek.

f5930e75a7416105e6c5ab57b3817923fe8ccb11

Ukažme si rozdíl na příkladu. Mějme následující data:

Když do formuláře napíšeme ITEM_ID = 43 AND DESCRIPTION CONTAINS "tričko", nevyhledá se nám žádný produkt, jelikož produkt s ITEM_ID rovnu 43 nemá zároveň DESCRIPTION obsahující text “tričko”.

A když do formuláře napíšeme ITEM_ID = 43 OR DESCRIPTION CONTAINS "tričko", vyhledají se nám 2 produkty.

:information_source:  Operátory spojovací i nespojovací jde psát i malými písmeny, např. “and” nebo “not in”. Nicméně konvence je psát je velkými písmeny.

Seskupování podmínek

Co kdybychom si chtěli vyfiltrovat takové produkty, které mají v popisu “tričko” nebo mají parametry Barva a Velikost? Podmínky pak
55f1e6b5c912f3a15c5e4577915b8416f72c6aa1
napíšeme takto:

!
55f1e6b5c912f3a15c5e4577915b8416f72c6aa1

:bulb: Pro přehlednost doporučujeme podmínky s více spojeními a seskupeními psát podobně nebo přímo tak, jako jsou v předchozím obrázku. Hlavně se vyvarujte psaní všech podmínek na jeden řádek. Budete se pak v podmínkách lépe orientovat.

Do slovní zásoby nám tímto přibývají kulaté závorky ( ). Do kulatých závorek seskupujeme podmínky, které se mají vyhodnotit společně. Protože kdybychom si podmínky výše napsali bez kulatých závorek,

nevíme, jestli prostřední podmínka PARAM | PARAM_NAME = "Barva" patří ke spojovacímu operátoru OR (před podmínkou), nebo ke spojovacímu operátoru AND (za podmínkou). Tedy buď jestli chceme vyhledat produkt s DESCRIPTION obsahující “tričko” nebo mající parametr Barva a k tomu daný produkt musí zároveň mít i parametr Velikost, anebo chceme vyhledat produkt s DESCRIPTION obsahující “tričko” nebo má oba parametry Barva a Velikost zároveň.

:information_source:  Podmínky v Onelineru nebo ve formuláři pro Vlastní MQL dotaz dohromady tvoří dotaz.

Praktické zajímavosti o MQL

  1. V rámci MQL je možné pracovat i se základními matematickými operacemi (sčítání +, odečítání -, násobení * a dělení /).
    c75aef5751d7a656c9f09307e4982fa3f2dd1608
    nebo
    f6f5f3132f13953ba9fb09620ce75e42ec1dc8ee

  2. V MQL může operátor NOT fungovat samostatně. Slouží k negaci podmínky nebo dotazu. Např. ITEM_ID != 43 je to samé jako NOT ( ITEM_ID = 43 ).
    cfabad7987d6a0751c4cee508bbfa7d342d4de1a
    Operátor NOT využijeme jako negaci hlavně u komplikovanějších dotazů, kdy budeme mít vytvořený dotaz a budeme chtít najít právě opak zadaného dotazu. Celý dotaz pak stačí strčit jednoduše do kulatých závorek operátoru NOT.
    a6aecb9fe910991db69d891e93be438d755ccb33

  3. Tvoření podmínek je velice podobné výrokové logice.

Syntaktické chyby

Tak jako v češtině se dají dělat pravopisné nebo gramatické chyby, tak v MQL se dají dělat syntaktické chyby. Pokud uděláme v našem zápisu nějakou syntaktickou chybu, většinou nás na to Mergado Editor upozorní. Jako příklad uvádíme podmínku se špatným operátorem nebo hodnotou:

:bulb: Přečtěte si příspěvek přímo věnovaný chybám ve formuláři pro Vlastní MQL dotaz.

K čemu slouží MQL?

Vytváření výběrů

Jak už zaznělo párkrát v průběhu celého tohoto příspěvku, MQL slouží k zápisu podmínek, které pak používáme na stránce Produkty pro filtrování produktů a pro vytváření jejich výběrů, jež potom používáme v pravidlech. Pomocí MQL můžeme definovat jakékoliv podmínky, které potřebujeme. Pokročilejší znalost MQL nám otevírá neomezené možnosti práce s daty.

Využití v Element-Path

Podmínky (napsané v MQL) používáme také jako upřesňovací prvek v podmínkách v cestě k elementu.

:information_source:  Existují podmínky v MQL a podmínky v cestě k elementu. Významově se jedná o dvě různé věci, i když se nazývají stejně. Podmínka v MQL se skládá ze 3 částí, jak jsme si popisovali výše, a podmínka v cestě k elementu začíná a končí složenými závorkami { }. V podmínce v cestě k elementu se může vyskytovat více podmínek v MQL.


584ecf6fe2521560e136212ed4f1653f3842b74e


Do podmínky v cestě k elementu můžeme prakticky vložit cokoliv z MQL - spojené podmínky, seskupené podmínky, základní matematické operace nebo několikanásobné kombinace spojených a seskupených podmínek. Prostě cokoliv.

Příklady použití

V této sekci vám ukážeme příklady z reálné praxe od našich uživatelů.

Popis je prázdný

Chceme si vyfiltrovat produkty, které mají element DESCRIPTION bez hodnot. V Onelineru bude podmínka vypadat takto:

6908852a8d79ef688e0228a38c5d1b380ba6816f

A pokud bychom chtěli v pravidle zacílit na element DESCRIPTION, jenž nemá hodnotu, cesta bude následující: DESCRIPTION { @@VALUE = "" }. V cestě jsme použili speciální atribut @@VALUE. Nicméně tento postup nedoporučujeme, protože je mnohonásobně efektivnější si vytvořit výběr.

Kategorie neobsahuje nějaký text a zároveň Typ parametru obsahuje obdélník

Chceme si vyfiltrovat produkty, které obsahují v elementu CATEGORYTEXT hodnotu “sprchový kout” a jejichž parametr Typ obsahuje hodnotu “obdélník”. V Onelineru bude podmínka vypadat takto:

Druhá kategorie

V pravidle Přepsat chceme zacílit na druhou hodnotu elementu CATEGORY zanořeného pod elementem CATEGORIES. V cestě k druhé hodnotě použijeme speciální atribut @@POSITION:

Další příklady

Uvádíme i další příklady z praxe.

Zobrazení Oneliner:

Formulář pro Vlastní MQL dotaz:

V pravidlech:

  • IMAGES | IMAGE { @@POSITION = 4 }
  • VARIANTS | VARIANT | STOCK | WAREHOUSES | WAREHOUSE { NAME = "Amoresa" } | VALUE
  • PARAM { PARAM_NAME = "Producent" } | VAL

Shrnutí

  • Co je MQL?
    MQL je zkratkou pro Mergado Query Language (česky Mergado dotazovací jazyk). Pomocí MQL se zapisují podmínky.
     
  • Co je podmínka (v MQL)?
    Podmínka je základním stavebním prvkem MQL a skládá se ze 3 částí:

    image

    Do 1. části se píše cesta k elementu, do 2. části se píše operátor a do 3. části se píše buď hodnota (číselná/textová), cesta k elementu, nebo regulární výraz.
     
  • Co se dá dělat s podmínkami a MQL?
    • Podmínky se dají spojovat pomocí spojovacích operátorů AND a OR.
    • Podmínky se dají sekupovat pomocí kulatých závorek. Víme tak, které podmínky se mají vyhodnotit společně.
    • V rámci MQL je možné pracovat se základními matematickými operacemi (sčítání +, odečítání -, násobení * a dělení /), a dokonce i s negací (pomocí operátoru NOT).
       
  • K čemu slouží podmínky a MQL?
    • Slouží k filtrování produktů a pro vytváření jejich výběrů na stránce Produkty.
    • Používáme je také jako upřesňovací prvek v podmínkách v cestě k elementu.
1 Like