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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 5
dnes 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

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

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 5
včera 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 33
včera 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 9
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

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

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 25
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 18
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 6
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 774 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

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: 1211×
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: 66
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.