Skvělou MySQL funkcí, o které mnoho lidí neví, je GROUP_CONCAT. Ve skutečnosti jsem ji neznal já a přišla mi velmi vhod.

Jednoduchý příklad použití: Máme v tabulce statisíce, možná milióny řádků typu
Id  | ProductID  | Tag

Máme několik tagů u každého ProductId a chceme vypsat všechny Tagy pro vybrané ProductId.

Tohle u jednoho produktu snadno vyřešíme SELECTem. Pokud bychom ale chtěli vypsat v jedné tabulce všechny Produkty s jejich tagy, asi bychom to museli složit pomocí skriptu, možná nějak přes JOINT.

Ale právě k tomu je zde GROUP_CONCAT()

  1. SELECT `ProductId`,
  2. GROUP_CONCAT(DISTINCT `Tag` SEPARATOR ',') as tags
  3. FROM `keywords`
  4. GROUP BY ProductId

Výsledek pak vypadá nějak takto:

ProductID  Tags
1          reality,průmyslové,pronájem,skladování,sklady
2          software,blog,hardware,it,novinky,názory
3          kilimandžáro,afrika
4          hudba

Poznámka, nicméně důležitá. MySQL má nastavenu max. délku výstupního řetězce na 1024 znaků, určutě je vhodná vyšší hodnota.

  1. mysql_query("SET group_concat_max_len = 4096");
Hlasujte pro tento článek:
  • Bookmarky.cz
  • Digg
  • del.icio.us
  • Google
  • Linkuj
  • Vybrali.sme
  • E-mail this story to a friend!
  • Facebook
  • LinkedIn

Tento kus MySQL dotazu v tabulce (kromě pár zbytečných hodnot které jsou tam jen pro názornost) by měl spočítat čas strávený na projektu nebo klientově webu. Počítá se jen čas mezi záznamy, který nepřesáhne např. 30 minut (já mám 01:30:00).
Stačí k tomu tabulku, kde logujeme čas a ip adresu.

  1. SET @last:=NULL;
  2. SELECT
  3. @last,
  4. dtime,
  5. if(TIMEDIFF(dtime,@last) < TIME('00:30:00'),TIMEDIFF(dtime,@last),0) as worktime,
  6. @last:=dtime
  7. FROM custsite_stats WHERE ip="86.115.160.9"
  8. ORDER BY id

Výsledek zřejmě bude třeba sečíst v PHP.
Pokud přijdete na to,jak to sečíst rovnou v MySql, je tady dole místo pro komentáře.

Update:
Čas je třeba sčítat pomocí ADDTIME(), výsledný dotaz vypadá takto:

  1. SET @before:=NULL;SET @cnt:=TIME('0:0:0');SET @threshold=TIME('0:30:0');
  2. SELECT
  3. @before,
  4. dtime,
  5. if(TIMEDIFF(dtime,@before) < @threshold,TIMEDIFF(dtime,@before),0) as `worktime`,
  6. @cnt:= ADDTIME (
  7.    @cnt,
  8.    if(TIMEDIFF(dtime,@before) < @threshold,TIMEDIFF(dtime,@before),0)
  9. ) as `sum`
  10. ,@before:=dtime
  11. FROM custsite_stats
  12. WHERE ip="86.115.160.9"
Hlasujte pro tento článek:
  • Bookmarky.cz
  • Digg
  • del.icio.us
  • Google
  • Linkuj
  • Vybrali.sme
  • E-mail this story to a friend!
  • Facebook
  • LinkedIn

Podpora SVG ve Windows

Jak si nastavit Windows 10, abychom mohli prohlížet .svg soubory?

Na rovinu, nativní podpora vektorového formátu je od Microsoftu stále nulová. Naštěstí nám jiní hodní a moudří programátoři připravili zdarma řešení. K tomu, abychom mohli běžně hledat a všelijak zacházet s obrázky ve formátu svg, si stačí stáhnout rozšíření pro explorer (nikoliv IE).

Instalační soubor najdete na https://svgextension.codeplex.com/

A co standalone aplikace?

Z free aplikací jsem zkusil FastStone, ale ten zůstal v minulém století.

Můžete ale přemluvit XnViewMP. Pokud se vám jej podaří asociovat na .svg, pak jej i zobrazí. Ale pokud po něm chcete katalogový náhled, najednou je to problém. Programátoři tam totiž nastavili blokování.

Najdete to v Settings > Browser > File list > Custom filter > Exclude, na konci seznamu. Hledá se to špatně, ale pak stačí odmazat poslední dva formáty. Radši se podívejte na obrázek.

xnview_svg_support_sm

Poznámka: Platí pro verzi XnViewMP 0.78, ve verzi (0.81) se SVG obrázky nezobrazují. V dalších verzích by to mělo být opraveno.

Elvis operátor – ?:

28. 11. 2015 | V kategorii PHP | Přidejte komentář

Elvis operátor je jen takové drobné vylepšení ternárního operátoru, které ovšem dokáže zpřehlednit kód, ale není vhodný úplně všude.
Prostě taková blbost. Ale líbí se mi ten smajlík s patkou.

  1. $varOne   = $_GET['var_one'] ?: null;
Hlasujte pro tento článek:
  • Bookmarky.cz
  • Digg
  • del.icio.us
  • Google
  • Linkuj
  • Vybrali.sme
  • E-mail this story to a friend!
  • Facebook
  • LinkedIn

Ano, vítězem soutěže o nejlepší klávesovou zkratku ve Windows 10 se stává klávesa windows.

Tohle mě v desítkách opravdu potěšilo. Po stisknutí klávesy [win] se nejen zobrazí nově zkriplené menu, ale také se nastaví fokus na vyhledávací pole, dokonce i když je skryté. Operační systém také už mnohem lépe vyhledává v instalovaných programech a souborech. Pro spouštění aplikací už nemusím “bloudit po desktopu” nebo hledat správné kontextové menu, stačí palcem stisknout správnou klávesu.

Postup:
Pro spuštění např konzole stačí stisknout jenom [win], napsat “cmd” (nebo možná “cmd.exe”) a [enter]. Easy.

Pokud máte dost místa na taskbaru, můžete si nastavit sobrazení vyhledávacího pole tamtéž.

Postup:
Kliknout pravým tlačítkem na lištu, Hledat > Zobrazit vyhledávací pole.

Ale jak jsem zmínil, není to nutné. Vyhledávací pole se objeví vedle menu, hned jak začnete psát.

cmd

Hlasujte pro tento článek:
  • Bookmarky.cz
  • Digg
  • del.icio.us
  • Google
  • Linkuj
  • Vybrali.sme
  • E-mail this story to a friend!
  • Facebook
  • LinkedIn

další články »