abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

včera 11:33 | Pozvánky

Konference LinuxDays 2017 proběhne o víkendu 7. a 8. října v Praze v Dejvicích v prostorách FIT ČVUT. Konference OpenAlt 2017 proběhne o víkendu 4. a 5. listopadu na FIT VUT v Brně. Organizátoři konferencí vyhlásili CFP (LinuxDays, OpenAlt). Přihlaste svou přednášku nebo doporučte konference známým.

Ladislav Hagara | Komentářů: 0
včera 06:00 | Nová verze

Byla vydána verze 1.3.0 odlehčeného desktopového prostředí Lumina (Wikipedie, GitHub) postaveného nad toolkitem Qt. Z novinek lze zmínit nový motiv ikon nahrazující Oxygen (material-design-[light/dark]) nebo vlastní multimediální přehrávač (lumina-mediaplayer).

Ladislav Hagara | Komentářů: 2
26.6. 17:33 | Bezpečnostní upozornění

Před šesti týdny byly publikovány výsledky bezpečnostního auditu zdrojových kódů OpenVPN a nalezené bezpečnostní chyby byly opraveny ve verzi OpenVPN 2.4.2. Guido Vranken minulý týden oznámil, že v OpenVPN nalezl další čtyři bezpečnostní chyby (CVE-2017-7520, CVE-2017-7521, CVE-2017-7522 a CVE-2017-7508). Nejzávažnější z nich se týká způsobu, jakým aplikace zachází s SSL certifikáty. Vzdálený útočník může pomocí speciálně

… více »
Ladislav Hagara | Komentářů: 1
26.6. 06:55 | Zajímavý projekt

V Edici CZ.NIC vyšla kniha Průvodce labyrintem algoritmů. Kniha je ke stažení zcela zdarma (pdf) nebo lze objednat tištěnou verzi za 339 Kč (připojení přes IPv4) nebo 289 Kč (připojení přes IPv6).

Ladislav Hagara | Komentářů: 6
26.6. 06:33 | Zajímavý software

Byla vydána verze 2.2.0 svobodného správce hesel KeePassXC (Wikipedie). Jedná se o komunitní fork správce hesel KeePassX s řadou vylepšení.

Ladislav Hagara | Komentářů: 0
26.6. 06:11 | IT novinky

Vývojář Debianu Henrique de Moraes Holschuh upozorňuje v diskusním listu debian-devel na chybu v Hyper-Threadingu v procesorech Skylake a Kaby Lake od Intelu. Za určitých okolností může chyba způsobit nepředvídatelné chování systému. Doporučuje se aktualizace mikrokódu CPU nebo vypnutí Hyper-Threadingu v BIOSu nebo UEFI [reddit].

Ladislav Hagara | Komentářů: 0
24.6. 01:23 | Komunita

Phoronix spustil 2017 Linux Laptop Survey. Tento dotazník s otázkami zaměřenými na parametry ideálního notebooku s Linuxem lze vyplnit do 6. července.

Ladislav Hagara | Komentářů: 3
23.6. 22:44 | Nová verze

Po třech měsících vývoje od vydání verze 5.5.0 byla vydána verze 5.6.0 správce digitálních fotografií digiKam (digiKam Software Collection). Do digiKamu se mimo jiné vrátila HTML galerie a nástroj pro vytváření videa z fotografií. V Bugzille bylo uzavřeno více než 81 záznamů.

Ladislav Hagara | Komentářů: 1
23.6. 17:44 | Nová verze

Byla vydána verze 9.3 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 3
23.6. 13:53 | Nová verze

Simon Long představil na blogu Raspberry Pi novou verzi 2017-06-21 linuxové distribuce Raspbian určené především pro jednodeskové miniaturní počítače Raspberry Pi. Společně s Raspbianem byl aktualizován také instalační nástroj NOOBS (New Out Of the Box Software). Z novinek lze zdůraznit IDE Thonny pro vývoj v programovacím jazyce Python a především offline verzi Scratche 2.0. Ten bylo dosud možné používat pouze online. Offline bylo možné používat pouze Scratch ve verzi 1.4. Z nového Scratchu lze ovládat také GPIO piny. Scratch 2.0 vyžaduje Flash.

Ladislav Hagara | Komentářů: 2
Chystáte se pořídit CPU AMD Ryzen?
 (6%)
 (31%)
 (1%)
 (9%)
 (44%)
 (9%)
Celkem 851 hlasů
 Komentářů: 65, poslední 1.6. 19:16
    Rozcestník

    Dotaz: MySQL – výběr na základě dat v jiné tabulce

    30.6.2013 11:17 Tref
    MySQL – výběr na základě dat v jiné tabulce
    Přečteno: 1217×
    Dobrý den, mohl by mi, prosím, někdo poradit s tímto? Řekněme, že mám dvě tabulky:
    table1                   table2
    ---------------          -----------------
    id      int              id           int
    /*     sth   */          table1_id    int
                             str2         text
    Data potřebuji pouze z table1, ovšem jen ze řádků, jejichž id odpovídá table1_id. Podmínkou je LIKE %% v str2, nejsnáze asi vysvětleno příkladem:
    table1
    ---------------
    1     /* sth */
    2     /* sth */
    
    table2
    ---------------
    1     1     cat
    2     1     dog
    3     1     horse
    4     2     cat
    5     2     dog
    6     2     elephant
    
    Pokud dotazu předám ca, vrátí se 1 a 2.
    Pokud dotazu předám ca a g, vrátí se taktéž 1 a 2.
    Pokud dotazu předám ca a or, vrátí se 1.
    Pokud dotazu předám ca a abcd, nevrátí se nic. Vstupů v jednom dotazu může být neomezeně a výkon je důležitý (table1 obsahuje přes 160 tisíc řádků, table2 přes 280 tisíc).

    Předem děkuji.


    Řešení dotazu:


    Odpovědi

    wamba avatar 30.6.2013 13:22 wamba | skóre: 37 | blog: wamba
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    no napadá mě použít GROUP_CONCAT
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    30.6.2013 13:41 Kit
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    SELECT * FROM table1 WHERE
        id IN (SELECT table1_id FROM table2 WHERE str2 LIKE '%orse%') AND
        id IN (SELECT table1_id FROM table2 WHERE str2 LIKE '%at%');
    
    Pokud záleží na výkonu, není vhodné EAV používat.
    30.6.2013 15:33 Tref
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    Děkuji za funkční řešení.
    15.7.2013 09:13 hyperventil
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    1. misto (select ... and select ...) pouzij (like ... or like ...)

    2. v pripade vetsich tabulek timto spolehlive zabijes mysql server. spravne reseni je pouzit join misto subselectu ve where casti.
    rADOn avatar 2.7.2013 17:48 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    SELECT DISTINCT t1.* FROM table1 t1
    JOIN table2 t2 ON t2.table1_id = t1.id
    WHERE 1=1
    AND t2.str LIKE '%whatever%'
    AND t2.str LIKE '%whateverelse%'
    
    Na vykon sere pes… pokud tam mas LIKE %% tak to stejne skonci fullscanem. Jestli se snazis zbastlit si made-by-samodoma fulltext, tak se snazis marne :-)

    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    2.7.2013 22:44 axel
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    Toto urcite nefunguje.
    15.7.2013 15:38 j
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    Toto zcela na 100% funguje a narozdil od tech hruz vejs je to jediny spravny reseni. Jen bych tam pridal left join, pokud je vazba 1:n (pripadne n:n) a ne 1:1.

    Jenom nevim, nac tam davat 1=1 ... ;D.

    A jak bylo receno, libovolnej like ... zabije vykon zcela spolehlive.
    15.7.2013 16:01 Kit
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    Možná to na 100 % funguje, ale zároveň je to 100% špatně, protože to nesplňuje zadání. Přečti si ho ještě jednou a pozorněji.
    rADOn avatar 15.7.2013 19:00 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    1=1 je vzdy true a query optimizer to vyhodi. je to dobry jen k tomu ze kdyz chci zakomentovat prvni podminku za tim tak nemusim odmazavat prebytecne ANDitko a pak zase naopak. ditto kdyz skladas strojove dotaz pro nejaky filtr.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    Josef Kufner avatar 16.7.2013 09:16 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: MySQL – výběr na základě dat v jiné tabulce
    Na tohle je lepší používat něco jako je FluentPDO. Tedy přiměřeně chytré lepítko fragmentů do výsledného selectu, které ví, v jakém pořadí je má slepit, takže lze pohodlně přidávat podmínky dle aktuálních potřeb (např. různá dynamická filtrování).
    Hello world ! Segmentation fault (core dumped)
    16.7.2013 10:46 Lyco
    Rozbalit Rozbalit vše Řešení s JOINem
    Jde to i tím JOINem, ale musí se na to jinak:
    SELECT id FROM table1 JOIN t2 ON table1.id = table2.t1_id WHERE 
      str2 LIKE '%ca%' 
      OR str2 LIKE '%or%' 
    GROUP BY t1.id HAVING count(str2) = $count;
    kde $count je počet podmínek (v tomhle případě 2).

    Každopádně souhlasím s předřečníky, že jakmile se používá LIKE '%něco%' tak nemá smysl výkon řešit - tohle bude pomalé pro jakýkoli netriviální počet záznamů, protože se nedá použít index. (Tedy alespoň v MySQL - PostgreSQL umí použít trigramový index, pokud to něco má aspoň 3 znaky. Tam to bude celkem rychlé, ale ten index bude celkem ohromný.)
    Tarmaq avatar 16.7.2013 11:46 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Řešení s JOINem
    S tim uvedenym joinem to nefunguje spravne. Nepocita totiz s variantou, ze pro jeden zaznam z table1 matchne vice zaznamu v table2. Pro data uvedena v zadani uvadim priklad:
    SELECT t1.id FROM table1 t1
    JOIN table2 t2 ON t1.id = t2.table1_id WHERE
      t2.str2 LIKE '%t%'
    GROUP BY t1.id HAVING count(t2.str2) = 1;
    
    Vrati jen 1, pritom by melo vratit i 2.
    Don't panic!

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.