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í
×
dnes 20:00 | Upozornění

Výbor pro právní záležitosti Evropského parlamentu (JURI) dnes přijal své stanovisko ke kontroverzní novele směrnice, která v EU upravuje autorské právo v online prostředí (Pro: 14, Proti: 9, Zdrželo se: 2). Další kolo legislativního procesu proběhne na začátku července.

Ladislav Hagara | Komentářů: 2
včera 19:55 | Zajímavý článek

Byly zveřejněny (pdf) podrobnosti o kritické bezpečnostní chybě CVE-2017-12542 v HPE iLO 4 (Integrated Lights-Out), tj. v proprietárním řešení společnosti Hewlett Packard Enterprise pro vzdálenou správu jejich serverů. Bezpečnostní chyba zneužitelná k obejití autentizace a k vzdálenému spuštění libovolného kódu byla opravena již v květnu loňského roku ve verzi 2.53.

Ladislav Hagara | Komentářů: 8
včera 17:55 | Zajímavý projekt

CSIRT.CZ informuje o CTF (Capture the Flag) platformě ZSIS CTF s úlohami pro procvičování praktických dovedností z oblasti kybernetické bezpečnosti a upozorňuje na soutěž Google Capture the Flag 2018, kde je možné vyhrát zajímavé ceny.

Ladislav Hagara | Komentářů: 0
včera 17:00 | Komunita

Byly zveřejněny prezentace a videozáznamy přednášek z prvního československého setkání síťových operátorů CSNOG konaného 11. a 12. června v Brně a semináře IPv6 2018 uskutečněného 6. června v Praze.

Ladislav Hagara | Komentářů: 0
včera 16:11 | Komunita

Svobodný unixový operační systém FreeBSD slaví 25 let. Přesně před pětadvaceti lety, tj. 19. června 1993, byl vybrán název FreeBSD.

Ladislav Hagara | Komentářů: 0
včera 15:11 | Komunita

Oficiální YouTube kanál Blenderu je již několik dní blokován. Nadace Blender Foundation informuje, že od společnosti Google dostala šestistránkový návrh nové smlouvy (pdf). Zdá se, že podmínkou další spolupráce je zapnutí reklam na kanálu, tj. zpeněžení obsahu.

Ladislav Hagara | Komentářů: 26
včera 01:55 | Nová verze

Byla vydána verze 1.13 multiplatformního open source textového editoru Brackets (Wikipedie, GitHub). Přehled novinek v oficiálním oznámení a v poznámkách k vydání. Brackets je nově dostupný také jako balíček ve formátu Flatpak z oficiálního repozitáře Flathub.

Ladislav Hagara | Komentářů: 4
18.6. 18:44 | Komunita

Oficiální YouTube kanál Blenderu je již několik dní blokován. Důvody jsou zatím nejasné. Pravděpodobně chyba YouTube. Dění lze sledovat na Twitteru Tona Roosendaala.

Ladislav Hagara | Komentářů: 19
18.6. 17:55 | Zajímavý software

Na GitHubu byly pod open source licencí LLVM zveřejněny zdrojové kódy překladače programovacího jazyka C++ Zapcc vycházejícího z Clangu/LLVM. Překlad pomocí Zapccu je díky lepšímu kešování obvykle několikrát rychlejší než překlad pomocí Clangu. V březnu loňského roku byl vydán Zapcc ve verzi 1.0.

Ladislav Hagara | Komentářů: 0
18.6. 17:22 | Pozvánky

Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.

xkucf03 | Komentářů: 1
Jak čtete delší texty z webových stránek?
 (77%)
 (22%)
 (4%)
 (6%)
 (3%)
 (11%)
Celkem 222 hlasů
 Komentářů: 37, poslední dnes 20:25
    Rozcestník

    Dotaz: Mysql dotaz

    25.9.2012 15:23 Ex
    Mysql dotaz
    Přečteno: 245×
    Ahoj,

    Chtel bych poprosit o radu se sestavenim sql dotazu.

    Zjednodusene rekneme ze jsou dve tabulky:

    users (se sloupcem id)

    items (se sloupcem user (cizi klic do users) a item)

    Potrebuji dotaz, najit usera ktery ma v tabulce items radky s item 1 a zaroven 5.

    Diky moc za pomoc

    Odpovědi

    25.9.2012 15:44 kuka
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Napriklad muzes pouzit exists.
    25.9.2012 16:08 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Vykonove asi nic moc, ale fungovat by mohlo (pokud jsem pozadavek spravne pochopil)
    select ...
    from users u
       inner join items i1 on i1.user=u.id and i.item=1
       inner join items i5 on i1.user=u.id and i.item=5
    
    Pevne verim, ze zkusenejsi uzivatele me s mymi napady usmerni a poslou tam, kam tyto napady patri...
    Tarmaq avatar 25.9.2012 16:14 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Mysql dotaz
    hh koukam ze jsi byl rychlejsi, navic to mame skoro stejne :] akorat mas spatne aliasy v tom porovnavani na item.. ale to se stane no ;]
    Don't panic!
    26.9.2012 07:40 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Jo, mam :-) Samozrejme tam ma byt i1 a i5, tak jak to mas ty :-)
    Pevne verim, ze zkusenejsi uzivatele me s mymi napady usmerni a poslou tam, kam tyto napady patri...
    Tarmaq avatar 25.9.2012 16:12 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Mysql dotaz
    SELECT DISTINCT u.id
    FROM users u
    INNER JOIN items i1 ON i1.user = u.id AND i1.item = 1
    INNER JOIN items i5 ON i5.user = u.id AND i5.item = 5
    
    Don't panic!
    25.9.2012 17:24 kuka
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Kazdy distinct je podezrely a tento obzvlast. Bud tam neni potreba (je zaruceno, ze kazdy item je pro uzivatele v items nejvyse jednou), nebo tam potreba je, a pak by se melo misto nej pouzit exists.
    25.9.2012 16:26 Ex
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Diky za tento napad, bez takoveho nasobneho spojovani to mozne neni? Protoze 2 hodnoty item byl priklad, potreboval bych ji i vice, a pak mi to uz neprijde jako vhodne reseni.
    25.9.2012 17:19 kuka
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Mozne to je i bez "takoveho nasobneho spojovani". Treba kdybys napsal, co potrebujes, tak by ti nekdo poradil "vhodne" reseni. Toto se ti nelibi proc - kvuli vykonu, kvuli tomu, ze nevis, kolik hodnot bude, nebo treba jen esteticky?
    25.9.2012 18:57 Ex
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Ano jak rikas, vykonove, myslim si ze pri vice polozkach by to nemuselo byt uplne ono.
    25.9.2012 19:27 kuka
    Rozbalit Rozbalit vše Re: Mysql dotaz
    No a mas tuto domenku necim podlozenou? Pokud budes chtit vsechny uzivatele s danou vlastnosti, bude pravdepodobne nejvykonnejsi group by dotaz pouze pres tabulku items. Pokud budes chtit jen pro jednoho nebo nekolik uzivatelu overit vlastnost, bude temer jiste nejefektivnejsi opakovane spojeni users s items (primo nebo pres exists), jak zde bylo navrhovano (pochopitelne za predpokladu, ze tam bude vhodny index). Samozrejme zalezi i na poctech zaznamu, pro radove desitky az stovky nebudou nejspis zadne rozdily vubec meritelne. V nekterych pripadech muze byt nejlepsi proceduralni zpracovani mimo databazi, pokud prichazi v uvahu.
    25.9.2012 17:33 Kit
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Jde to i pro vícenásobné spojování a nemusí to být pomalé. Pokud bys to chtěl bez toho, musel bys opustit model EAV a navrhnout databázi pořádně.

    Další možností je použití hstore v PostgreSQL.
    26.9.2012 10:47 kaaja | skóre: 23 | blog: Sem tam něco | Podbořany, Praha
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Protože nemám mysql, tak nevím jestli to bude fungovat, ale na jiné db určitě bude
    SELECT DISTINCT u.id
    FROM users u
    where (select count(*) from items i where i.item in (..polozky..)  ) = pocet_polozek
    
    26.9.2012 11:44 kuka
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Tak tohle urcite nebude fungovat nikde, napriklad se tam jaksi nevyskytuje zadna podminka na tu tabulku users. Myslenka jako takova je pouzitelna, ovsem spravne realizovana vede na jednoduchy group by dotaz nad items
    select user_id from items 
    where item in (..polozky..)   
    group by user_id 
    having count(*) = pocet_polozek
    
    26.9.2012 15:17 kaaja | skóre: 23 | blog: Sem tam něco | Podbořany, Praha
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Sorry, psal jsem to na sucho a vypadlo mi to

    SELECT DISTINCT u.id
    FROM users u
    where (select count(*) from items i where i.item in (..polozky..) and i.user = u.id  ) = pocet_polozek
    
    26.9.2012 07:51 George O.
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Mnohem jednodussi bude navrhnout db jako clovek, pak ti bude stacit jednoduchy inner join :-)
    26.9.2012 08:51 Kit
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Existuje pár typů aplikací, ve kterých to nejde tak jednoduše. Například obchod s komponentami PC. Každý díl může mít jinou sadu parametrů a předělávat databázi s každým novým typem zboží nemusí být levná záležitost. Výhodnější je navrhnout univerzální strukturu, kterou bude moct obchodník pracovat dle potřeby.
    Josef Kufner avatar 26.9.2012 15:35 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Na tohle sice slouží EAV, ale je jednodušší naučit aplikaci používat ALTER a různé tabulky pro velmi odlišné typy zboží (pak stačí jeden join podle typu). Sice to není zrovna krásné z pohledu relačních databází, ale ušetříš si tím mnoho dní práce a ladění.

    Kdysi už tu na tohle téma pár diskusí bylo a tohle jsem tam popisoval podrobněji.
    Hello world ! Segmentation fault (core dumped)
    26.9.2012 09:55 kuka
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Zda se, ze mas kvalitni kristalovou kouli. Jak tedy bude vypadat tazatelova databaze, kdyz ji navrnes ty pro svuj "jednoduchy inner join"?

    26.9.2012 10:56 Kit
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Každá vlastnost bude mít vlastní sloupec v nějaké tabulce.
    26.9.2012 11:25 kuka
    Rozbalit Rozbalit vše Re: Mysql dotaz
    No tak kdybych se pridrzel toho, co nam tazatel sdelil (users, items), tak items by mohly byt klidne treba fasovane veci. Bude velice prakticke, az nejakemu uzivateli koupi novou lampicku, pridavat sloupec to tabulky nebo lepe do vice tabulek. Proste nikdo netusi, k cemu to ma byt, takze odpoved "navrhni si databazi lepe" je nesmyslna. Navic zmena struktury databaze nebyva vhodnym postupem ve vetsine scenaru, napriklad pokud nekdo dostane za ukol udelat report nad existujicimi daty.
    Josef Kufner avatar 26.9.2012 15:38 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Mysql dotaz
    select u.*
    from users as u
    left join items as i on i.user = u.id
    where i.id IN (1, 5)
    group by u.id
    having count(i.id) = 2
    
    Hello world ! Segmentation fault (core dumped)
    26.9.2012 16:16 Kit
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Hmm. A co když bude mít 2× item1 a ani jednou item5?
    26.9.2012 16:47 kuka
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Bud musi byt vecne zarucena unikatnost nebo

    ...count(distinct i.id)...
    Josef Kufner avatar 26.9.2012 16:50 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Na sloupci item.id nejspíš bude primární klíč, takže duplicita nehrozí.
    Hello world ! Segmentation fault (core dumped)
    26.9.2012 16:58 Kit
    Rozbalit Rozbalit vše Re: Mysql dotaz
    V tom případě se mi víc líbí řešení od Tarmaq.

    Tazatel psal, že se počet těch podmínek bude měnit. To znamená, že ten dotaz bude pokaždé vypadat hodně jinak. V původním řešení se jen budou přidávat další řádky.

    Kdyby v MySQL bylo možné i scheme-less řešení (např. hstore), tato debata by byla už dávno u konce.
    Josef Kufner avatar 26.9.2012 17:08 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Mysql dotaz
    Otázkou je, co bude rychlejší a jak ty dotazy i data nakonec budou vypadat.

    Já bych se ale na EAV a podobné zrůdnosti vykašlal. Pokud jde o filtrování podla tagů nebo něčeho takového, tak ten group by je mnohem rychlejší (pokud si to pamatuju dobře; kdysi jsem právě přepisoval hnusný selecty z jednoho tvaru do druhého, jen už nevím, jak to dopadlo).
    Hello world ! Segmentation fault (core dumped)
    26.9.2012 17:17 Kit
    Rozbalit Rozbalit vše Re: Mysql dotaz
    EAV je dobře použitelné, pokud je hodně atributů a málo záznamů. Předpokládám, že přesně tohle je případ tazatele. Pokud by tomu bylo jinak, EAV by asi nepoužil.

    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.