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 12:33 | Zajímavý projekt

    MALUS je kontroverzní proprietarní nástroj, který svým zákazníkům umožňuje nechat AI, která dle tvrzení provozovatelů nikdy neviděla původní zdrojový kód, analyzovat dokumentaci, API a veřejná rozhraní jakéhokoliv open-source projektu a následně úplně od píky vygenerovat funkčně ekvivalentní software, ovšem pod libovolnou licencí.

    NUKE GAZA! 🎆 | Komentářů: 11
    včera 03:55 | Bezpečnostní upozornění

    Příspěvek na blogu Ubuntu upozorňuje na několik zranitelností v rozšíření Linuxu o mandatorní řízení přístupu AppArmor. Společně jsou označovány jako CrackArmor. Objevila je společnost Qualys (technické detaily). Neprivilegovaný lokální uživatel se může stát rootem. Chyba existuje od roku 2017. Doporučuje se okamžitá aktualizace. Problém se týká Ubuntu, Debianu nebo SUSE. Red Hat nebo Fedora pro mandatorní řízení přístupu používají SELinux.

    Ladislav Hagara | Komentářů: 2
    12.3. 17:22 | Nová verze

    Byla vydána nová verze 19 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v changelogu.

    Ladislav Hagara | Komentářů: 0
    12.3. 03:44 | Nová verze

    Bitwig Studio (Wikipedie) bylo vydáno ve verzi 6. Jedná se o proprietární multiplatformní (macOS, Windows, Linux) digitální pracovní stanici pro práci s audiem (DAW).

    Ladislav Hagara | Komentářů: 4
    12.3. 02:11 | Komunita

    Společnost Igalia představila novou linuxovou distribuci (framework) s názvem Moonforge. Jedná se o distribuci určenou pro vestavěné systémy. Vychází z projektů Yocto a OpenEmbedded.

    Ladislav Hagara | Komentářů: 0
    12.3. 00:44 | Nová verze

    Google Chrome 146 byl prohlášen za stabilní. Nejnovější stabilní verze 146.0.7680.71 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 29 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    12.3. 00:22 | Nová verze

    D7VK byl vydán ve verzi 1.5. Jedná se o fork DXVK implementující překlad volání Direct3D 3 (novinka), 5, 6 a 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.

    Ladislav Hagara | Komentářů: 0
    11.3. 23:22 | Nová verze

    Bylo vydáno Eclipse IDE 2026-03 aneb Eclipse 4.39. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.

    Ladislav Hagara | Komentářů: 4
    11.3. 10:22 | Upozornění

    Ze systému Slavia pojišťovny uniklo přibližně 150 gigabajtů citlivých dat. Jedná se například o pojistné dokumenty, lékařské záznamy nebo přímou komunikaci s klienty. Za únik může chyba dodavatelské společnosti.

    Ladislav Hagara | Komentářů: 14
    11.3. 10:11 | IT novinky

    Sněmovna propustila do dalšího kola projednávání vládní návrh zákona o digitální ekonomice, který má přinést bezpečnější on-line prostředí. Reaguje na evropské nařízení DSA o digitálních službách a upravuje třeba pravidla pro on-line tržiště nebo sociální sítě a má i víc chránit děti.

    Ladislav Hagara | Komentářů: 36
    Které desktopové prostředí na Linuxu používáte?
     (16%)
     (7%)
     (0%)
     (12%)
     (29%)
     (2%)
     (5%)
     (1%)
     (13%)
     (25%)
    Celkem 1068 hlasů
     Komentářů: 26, poslední 12.3. 08:56
    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: 1339×
    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: 38 | 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: 70
    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.