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 00:11 | Nová verze

    Open source modální textový editor Helix, inspirovaný editory Vim, Neovim či Kakoune, byl vydán ve verzi 25.07. Přehled novinek se záznamy terminálových sezení v asciinema v oznámení na webu. Detailně v CHANGELOGu na GitHubu.

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

    Americký výrobce čipů Nvidia získal od vlády prezidenta Donalda Trumpa souhlas s prodejem svých pokročilých počítačových čipů používaných k vývoji umělé inteligence (AI) H20 do Číny. Prodej těchto čipů speciálně upravených pro čínský trh by tak mohl být brzy obnoven, uvedla firma na svém blogu. Americká vláda zakázala prodej v dubnu, v době eskalace obchodního sporu mezi oběma zeměmi. Tehdy to zdůvodnila obavami, že by čipy mohla využívat čínská armáda.

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

    3D software Blender byl vydán ve verzi 4.5 s prodlouženou podporou. Podrobnosti v poznámkách k vydání. Videopředstavení na YouTube.

    Ladislav Hagara | Komentářů: 0
    14.7. 22:22 | Komunita

    Open source webový aplikační framework Django slaví 20. narozeniny.

    Ladislav Hagara | Komentářů: 0
    14.7. 16:11 | Komunita

    V Brestu dnes začala konference vývojářů a uživatelů linuxové distribuce Debian DebConf25. Na programu je řada zajímavých přednášek. Sledovat je lze online.

    Ladislav Hagara | Komentářů: 0
    14.7. 11:33 | IT novinky

    Před 30 lety, tj. 14. července 1995, se začala používat přípona .mp3 pro soubory s hudbou komprimovanou pomocí MPEG-2 Audio Layer 3.

    Ladislav Hagara | Komentářů: 26
    14.7. 10:55 | IT novinky

    Výroba 8bitových domácích počítačů Commodore 64 byla ukončena v dubnu 1994. Po více než 30 letech byl představen nový oficiální Commodore 64 Ultimate (YouTube). S deskou postavenou na FPGA. Ve 3 edicích v ceně od 299 dolarů a plánovaným dodáním v říjnu a listopadu letošního roku.

    Ladislav Hagara | Komentářů: 20
    13.7. 17:55 | Zajímavý projekt

    Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila open source robota Reachy Mini (YouTube). Předobjednat lze lite verzi za 299 dolarů a wireless verzi s Raspberry Pi 5 za 449 dolarů.

    Ladislav Hagara | Komentářů: 17
    11.7. 16:44 | Komunita

    Dnes v 17:30 bude oficiálně vydána open source počítačová hra DOGWALK vytvořena v 3D softwaru Blender a herním enginu Godot. Release party proběhne na YouTube od 17:00.

    Ladislav Hagara | Komentářů: 3
    11.7. 14:55 | Humor

    McDonald's se spojil se společností Paradox a pracovníky nabírá také pomocí AI řešení s virtuální asistentkou Olivii běžící na webu McHire. Ian Carroll a Sam Curry se na toto AI řešení blíže podívali a opravdu je překvapilo, že se mohli přihlásit pomocí jména 123456 a hesla 123456 a získat přístup k údajům o 64 milionech uchazečů o práci.

    Ladislav Hagara | Komentářů: 16
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (26%)
     (7%)
     (3%)
     (1%)
     (1%)
     (4%)
    Celkem 398 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Dotaz: Mysql dotaz

    25.9.2012 15:23 Ex
    Mysql dotaz
    Přečteno: 290×
    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.