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

Byla vydána verze 2.12.0 QEMU (Wikipedie). Přispělo 204 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn. Řešeny jsou také bezpečnostní chyby Meltdown a Spectre.

Ladislav Hagara | Komentářů: 0
dnes 00:33 | Komunita

Google zveřejnil seznam 1 264 studentů přijatých do letošního Google Summer of Code. Přehled projektů, studentů, 212 organizací a mentorů je k dispozici na stránkách GSoC.

Ladislav Hagara | Komentářů: 0
včera 23:55 | Nová verze

Oracle vydal verzi 1.0 univerzálního virtuálního stroje GraalVM, který umožňuje běh programů napsaných v jazycích založených na JVM, JavaScript, LLVM bitcode a experimentálně Ruby, R a Python.

razor | Komentářů: 0
včera 01:22 | Zajímavý článek

Julia Evans pomocí svých kreslených obrázků proniká do Linuxu a informačních technologií. Vedle ucelených zinů publikuje také jednotlivé kreslené obrázky (RSS).

Ladislav Hagara | Komentářů: 5
23.4. 13:22 | Zajímavý software

Jordi Sanfeliu vydal verzi 1.0.0 svého unixového jádra Fiwix (Wikipedie) určeného také pro výuku operačních systémů. Dle článku na OSNews na něm začal pracovat již před více než dvaceti lety. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT. Stáhnout a vyzkoušet lze živou disketu nebo CD s GNU/Fiwixem.

Ladislav Hagara | Komentářů: 4
23.4. 06:00 | Nová verze

Byla vydána nová verze 10.7 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu. Vývojáři GitLabu zdůrazňují Web IDE (YouTube) a SAST (Static Application Security Testing) pro Go a C/C++.

Ladislav Hagara | Komentářů: 4
22.4. 14:00 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, zveřejnil na svém blogu recenzi notebooku Librem 13 od společnosti Purism. Používá jej již sedm měsíců a s ním i jako umělec spokojen. Potřebu francouzské AZERTY klávesnice vyřešil přelepkami. Na displej se podíval kalibrační sondou, barvy vyladil pomocí open source softwaru DisplayCAL, v aplikaci Inkscape nastavil zvětšování na 170 % aby 1 cm v Inkscapu byl 1 cm v reálu. Webovou kameru, mikrofon, Wi-Fi a Bluetooth lze na Librem 13 hardwarově vypnout.

Ladislav Hagara | Komentářů: 7
21.4. 23:44 | Komunita

Několik posledních verzí GNOME Shellu obsahuje chybu způsobující memory leak (únik paměti). Viz například videozáznamy verzí 3.26 nebo 3.28. Nalezení chyby #64 a její opravě se věnuje Georges Basile Stavracas Neto v příspěvku na svém blogu [reddit].

Ladislav Hagara | Komentářů: 2
21.4. 10:33 | Komunita

V pondělí měl na YouTube online premiéru otevřený krátký 2D film Hero vytvořený v 3D softwaru Blender. Cílem stejnojmenného projektu Hero je vylepšit nástroj Grease Pencil (tužka) v Blenderu 2.8.

Ladislav Hagara | Komentářů: 4
20.4. 23:22 | Nová verze

Byla vydána verze 4.0 kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie). Přehled novinek v Changelogu (GitHub).

Ladislav Hagara | Komentářů: 0
Používáte na serverech port knocking?
 (2%)
 (7%)
 (46%)
 (27%)
 (18%)
Celkem 369 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    Rozcestník

    Dotaz: MySQL spájanie tabuliek v selecte

    30.9.2014 11:27 Peter
    MySQL spájanie tabuliek v selecte
    Přečteno: 495×
    Dobrý deň vám prajem.

    Robím importnú funkciu pre zápis externých dát do vTiger CRM a chcem si overiť či to čo som vymyslel je správne.

    Mám nejaký cyklus, ktorý načítava dáta z CSV súboru riadok po riadku a hľadá k tomu externému záznamu existujúci v MySQL databáze aby ho mohol aktualizovať. Kód vyzerá nasledovne:
    cyklus_citania_csv
      {
        $Query='select
                  vtiger_crmentity.crmid as ID,
                  vtiger_leaddetails.firstname as meno,
                  vtiger_leaddetails.lastname as priezvisko,
                  vtiger_leaddetails.email as email,
                  vtiger_leadaddress.lane as ulica,
                  vtiger_leadaddress.city as mesto,
                  vtiger_crmentity.modifiedtime as zmena
                from
                  vtiger_crmentity
                  left join vtiger_leadaddress on vtiger_crmentity.crmid=vtiger_leadaddress.leadaddressid
                  left join vtiger_leaddetails on vtiger_crmentity.crmid=vtiger_leaddetails.leadid
                  left join vtiger_users on vtiger_crmentity.smownerid=vtiger_users.id
                where
                  (
                    vtiger_leaddetails.lead_no=\''.$riadok_z_csv['id_zaznamu_napriklad_LEA12345'].'\'
                      and
                    vtiger_users.user_name=\''.$riadok_z_csv['prideleny_pouzivatel'].'\'
                      and
                    vtiger_crmentity.deleted=\'0\'
                  )
                limit 1;';
        $Actual=mysql_fetch_array(mysql_query($Query,$Database));
    
        if($Actual)
          {
            mysql_query('update
                           vtiger_crmentity
                           left join vtiger_leadaddress on vtiger_crmentity.crmid=vtiger_leadaddress.leadaddressid
                           left join vtiger_leaddetails on vtiger_crmentity.crmid=vtiger_leaddetails.leadid
                         set
                           vtiger_leaddetails.firstname=\''.$riadok_z_csv['meno'].'\',
                           vtiger_leaddetails.lastname=\''.$riadok_z_csv['priezvisko'].'\',
                           vtiger_leaddetails.email=\''.$riadok_z_csv['email'].'\',
                           vtiger_leadaddress.lane=\''.$riadok_z_csv['ulica'].'\',
                           vtiger_leadaddress.city=\''.$riadok_z_csv['mesto'].'\',
                           vtiger_crmentity.modifiedtime=\''.$riadok_z_csv['zmena'].'\'
                         where
                           (
                             vtiger_crmentity.crmid=\''.$Actual['ID'].'\'
                           );');
          }
      }
    
    Rozdelenie na select a update je tam kvôly tomu, že medzi nimi prebieha ešte veľa rôznych testov a výpisov (keby sa niekto pýtal, že prečo nie rovno update).

    A mňa teraz zaujíma aký je vlastne rozdiel v spájaní tabuliek pomocou left join a pomocou spájania vo where (select * from table t1, table t2 where t1.id=t2.id). Ja potrebujem aby ak bude niekde nejaká zrada aby sa nevykonal celý select. Napríklad, prepokladajme, že v tabuľke vtiger_leadaddress nenájde záznam kde bude platiť vtiger_crmentity.crmid=vtiger_leadaddress.leadaddressid. Vykoná sa select aj napriek tomu len položky ulica a mesto budú prázdne? Alebo celý select skončí chybou?

    A druhá otázka. Postačuje ako kontrola správnosti výsledku if($Actual)? Predpokladám, že pri "nesprávnom" selecte budem mať v premennej $Actual=NULL. Alebo treba testovať nejako ináč?

    Veľmi dúfam, že nejaká dobrá duša pochopila môj pokus o vykoktanie sa o čo mi vlastne ide. Vopred vám veľmi pekne ďakujem za odpovede.

    Odpovědi

    30.9.2014 12:05 Peter
    Rozbalit Rozbalit vše Re: MySQL spájanie tabuliek v selecte
    No, teraz mi došlo, že namiesto left join mam v tomto pripade asi použiť inner join.
    2.10.2014 14:58 MaP
    Rozbalit Rozbalit vše Re: MySQL spájanie tabuliek v selecte
    ... a co to uzavřít do transakce?
    3.10.2014 11:58 Tomáš
    Rozbalit Rozbalit vše Re: MySQL spájanie tabuliek v selecte
    A mňa teraz zaujíma aký je vlastne rozdiel v spájaní tabuliek pomocou left join a pomocou spájania vo where

    Inner join můžete vždy přepsat pomocí where konstrukce. O left joinu toto neplatí. (opomíjím historickou konstrukci na Oracle "+="). A teď si jen někde přečtěte jaký je rozdíl mezi inner join a left/right join, než budete číst dál.

    Kanonický způsob vyhodnocení dotazu je: napřed joiny pak teprve where. Ve Vašem případě, jak jste správně zjistil, je jedno zda použijete left join nebo inner join pro tabulky vtiger_leaddetails a vtiger_users (nikoliv pro vtiger_leadaddress). Výsledek bude stejný a optimizer si interně nahradí left join operací inner join, protože dává více možností k optimalizaci. Napřed (zcela nekanonicky) nejspíše udělá where filter na vtiger_leaddetails.lead_no a vtiger_users.user_name. Pak s výslednými leadid/smownerid, půjde do indexů tabulky vtiger_crmentity. … Tento postup by si se skutečným left join dovolit nemohl. Viz definice left join.

    Napríklad, prepokladajme, že v tabuľke vtiger_leadaddress nenájde záznam kde bude platiť vtiger_crmentity.crmid=vtiger_leadaddress.leadaddressid. Vykoná sa select aj napriek tomu len položky ulica a mesto budú prázdne?

    Ano vykoná, zmíněné položky budou NULL.

    Postačuje ako kontrola správnosti výsledku if($Actual)?

    Toto je dost nejasný dotaz. Co je správný výsledek? Je to že byl vrácen právě jeden řádek? Nejvýše jeden řádek? Nebo právě jedno crmid? Třeba si představte že pro různá crmid je můžou existovat stejné hodnoty v polích vtiger_leaddetails.lead_no a vtiger_users.user_name. Je vtiger_leaddetails.lead_no klíčem do tabulky vtiger_leaddetails? Je vtiger_users.user_name klíčem této tabulky?

    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.