abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    dnes 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    včera 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 6
    včera 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | IT novinky

    Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | Nová verze

    Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

    Ladislav Hagara | Komentářů: 2
    včera 04:11 | Nová verze

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 739 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Mysql dotaz

    25.9.2012 15:23 Ex
    Mysql dotaz
    Přečteno: 264×
    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
    
    Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
    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 :-)
    Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
    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: 24 | 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: 24 | 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: 70
    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: 70
    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: 70
    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: 70
    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.