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í
×
    včera 23:22 | Humor

    Jihokorejská Národní daňová služba (NTS) zabavila kryptoměnu Pre-retogeum (PRTG) v hodnotě 5,6 milionu dolarů. Pochlubila se v tiskové zprávě, do které vložila fotografii zabavených USB flash disků s kryptoměnovými peněženkami spolu se souvisejícími ručně napsanými mnemotechnickými obnovovacími frázemi. Krátce na to byla kryptoměna v hodnotě 4,8 milionu dolarů odcizena. O několik hodin ale vrácena, jelikož PRTG je extrémně nelikvidní, s denním objemem obchodování kolem 332 dolarů a zalistováním na jediné burze, MEXC [Bitcoin.com].

    Ladislav Hagara | Komentářů: 4
    včera 16:33 | Nová verze

    Komunita kolem Linuxu From Scratch (LFS) vydala nové verze knih s návody na instalaci vlastního linuxového systému ze zdrojových kódů Linux From Scratch 13.0 a Beyond Linux From Scratch 13.0. Pouze se systemd.

    Ladislav Hagara | Komentářů: 1
    včera 16:00 | Nová verze

    Byla vydána nová stabilní major verze 25.12 linuxové distribuce primárně určené pro routery a vestavěné systémy OpenWrt (Wikipedie). Jedná se o nástupce předchozí major verze 24.10. Přehled novinek v poznámkách k vydání. Podporováno je více než 2200 zařízení.

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

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za únor (YouTube). Odstraněn byl veškerý kód napsaný ve Swiftu. JavaScriptový engine LibJS byl reimplementován v Rustu.

    Ladislav Hagara | Komentářů: 0
    5.3. 21:11 | Nová verze

    Byla vydána verze 1.94.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example. Zveřejněny byly výsledky průzkumu mezi vývojáři v programovacím jazyce Rust: 2025 State of Rust Survey Results.

    Ladislav Hagara | Komentářů: 7
    5.3. 17:33 | Komunita

    Google zveřejnil seznam 185 organizací přijatých do letošního Google Summer of Code (GSoC). Dle plánu se zájemci přihlašují od 16. do 31. března. Vydělat si mohou od 750 do 6600 dolarů. V Česku a na Slovensku je to 900 dolarů za malý, 1800 dolarů za střední a 3600 dolarů za velký projekt. Další informace v často kladených otázkách (FAQ). K dispozici jsou také statistiky z minulých let.

    Ladislav Hagara | Komentářů: 0
    4.3. 22:55 | Nová verze

    Byla vydána únorová aktualizace aneb nová verze 1.110 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.110 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 8
    4.3. 18:11 | IT novinky

    Apple představil 13palcový MacBook Neo s čipem A18 Pro. V základní konfiguraci za 16 990 Kč.

    Ladislav Hagara | Komentářů: 57
    4.3. 12:22 | Komunita

    Kalifornský zákon AB 1043 platný od 1. ledna 2027 vyžaduje, aby operační systémy požadovaly po uživatelích věk nebo datum narození a skrze API poskytovaly aplikacím informaci, zda je uživatel mladší 13 let, má 13 až 16 let, má 16 až 18 let nebo má alespoň 18 let. Vývojáři linuxových distribucí řeší, co s tím (Ubuntu, Fedora, …).

    Ladislav Hagara | Komentářů: 106
    4.3. 11:44 | Pozvánky

    Konference LinuxDays 2026 proběhne o víkendu 3. a 4. října v Praze v areálu ČVUT v Dejvicích na FIT. Čekají vás desítky přednášek, workshopy, stánky a setkání se spoustou chytrých lidí.

    Petr Krčmář | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (17%)
     (7%)
     (0%)
     (11%)
     (28%)
     (2%)
     (5%)
     (2%)
     (13%)
     (25%)
    Celkem 1027 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Dotaz: Kartézký součin

    derddddd avatar 22.12.2005 09:04 derddddd | skóre: 4 | blog: lama_log | Pisek
    Kartézký součin
    Přečteno: 588×
    dobrý den, ahoj !

    Menší problém - mám tabulku se dvěma sloupci (id_palivo, nazev_palivo), no a v jednom formuláři, kde admin přidává auto do databáze si vybírá palivo, kt. se pak zapíše na řádků spolu s dalšími vlastnostmi auta.

    Kde je problém - že mi to vypíše do select.boxu všechny kombinace - hledal sem jak to řešit, ale všude je psáno jako jediné řešení hlubší-specifikovaný dotaz pomocí WHERE, nojo ale ja nemám dle čeho bych to specifikoval, nemam k čemu vázat palivo - tato tabulka pouze slouží k doplnění o jedné vlastnosti auto do jedne veliké, kde se již reálné auto zapisuje s právě uvedenými daty s jednotlivejch tabulek (obsah_motoru, palivo atd.)
    Snad se tady neztratím...:))

    Odpovědi

    derddddd avatar 22.12.2005 09:22 derddddd | skóre: 4 | blog: lama_log | Pisek
    Rozbalit Rozbalit vše Re: Kartézký součin
    pro uplnost: php,mysql

    model db je: jedna tabulka jako sběrač dat s indexy do jednotlivých tabulek, kt. specifikují vlastnosti aut
    Snad se tady neztratím...:))
    22.12.2005 09:28 Martin Baleja | skóre: 13 | blog: Segmentation_Fault
    Rozbalit Rozbalit vše Re: Kartézký součin
    Jestli to dobře chápu, potřebuješ dotaz ve stylu: SELECT co_potrebujes FROM tabulka_auta AS auta, tabulka_paliva AS paliva WHERE auta.id_paliva=paliva.id;

    Ale popravdě - nějak jsem ten tvůj dotaz asi nepochopil. Může to ale být i tím, že jsem teprv před chvilkou nabootoval a obnovuji žurnál;-)

    Zkus toho o problému prozradit trošku víc.
    Why are hemorrhoids called "hemorrhoids" instead of "assteroids"?
    derddddd avatar 22.12.2005 14:17 derddddd | skóre: 4 | blog: lama_log | Pisek
    Rozbalit Rozbalit vše Re: Kartézký součin
    #####
    tohle musim vyzkouset... zatim diky Jestli to dobře chápu, potřebuješ dotaz ve stylu: SELECT co_potrebujes FROM tabulka_auta AS auta, tabulka_paliva AS paliva WHERE auta.id_paliva=paliva.id; ## budu referovat... zatim diky
    Snad se tady neztratím...:))
    Petr Bravenec avatar 22.12.2005 15:13 Petr Bravenec | skóre: 43 | blog: Bravenec
    Rozbalit Rozbalit vše Re: Kartézký součin

    Dotaz jsem taky nepochopil. Ale řekněme, že by mohlo být odpovědí už výše uvedené:

    select auta.*, paliva.nazev_palivo
      from tabulka_auta auta,
           tabulka_paliva paliva
      where auta.id_palivo = paliva.id_palivo;
    

    Průserem je, pokud některé auto nemá zadané palivo - pak se takové auto nevypíše. Pro tyto případy je lépe použít dotaz:

    select auta.*, paliva.nazev_palivo
      from tabulka_auta auta
      left join tabulka_paliva paliva using (id_palivo);
    

    Kapitálním průserem by bylo, pokud by snad mnohem rychlejší databáze neuměla left join (nevím):

    select auta.*, paliva.nazev_palivo
      from tabulka_auta auta,
           tabulka_paliva paliva
      where auta.id_palivo = paliva.id_palivo
    union all 
    select auta.*, null
      from tabulka_auta auta
      where auta.id_palivo is null;
    

    No a pak, jestli se vám takto složitý dotaz na získání takto jednoduché informace nelíbí, doporučuji view. Jestli vaše databáze view neumí (nevím), zkuste nějakou méně rychlou.

    Samozřejmostí při takovém datovém návrhu by měly být cizí klíče - to jen pro sichr, aby vám nějaký nezodpovědný jedinec nezadal do databáze k nějakému auto neexistující palivo, či snad, nedejbobe, nesmazal palivo, na které ještě pořád některé z vašich aut jezdí:

    create table tabulka_auta (
    ....
      id_palivo int4 references tabulka_paliva(id_palivo) 
                on update cascade on delete cascade
    ....
    
    Petr Bravenec - Hobrasoft s.r.o.
    derddddd avatar 22.12.2005 16:42 derddddd | skóre: 4 | blog: lama_log | Pisek
    Rozbalit Rozbalit vše Re: Kartézký součin
    Musim se přiznat, že po zpětném přečtení.... je to ostuda, taky to nechápu!

    Zkusim to vysvětlit příkladem:
    1) Vytvořím tabulku tb_auto (s třemi sloupci: jméno výrobce, jméno modelu a obsah motoru - vše to budou SMALLINT)

    2) Vytvořím tabulky tb_vyrobce, tb_model, tb_obsah,kt. budou naplněny textovými daty (např. Ford, Mustang, 2.0). Dvě z nich budou míti 2 sloupce - tb_vyrobce - id_vyrobce, nazev_vyrobce, tb_obsah - id_obsah, nazev_obsah apod. Tabulka tb_model bude mít sloupce 3 - id, název a id_vyrobce.

    Tak asociace jsou zcela jasné - údaje v ústřední tb_auto jsou pouze čísla, kt. jsou v relacích s id v tab. tb_vyrobce,tb_model, tb_obsah. Tak to je struktura db!

    Kde je problém - obsluha db?
    Píšu obslužný formulář, kt. ošetřuje přidávání aut do tb_auto a to pomocí select.boxu a option tagů, do kt. načítám data z tb_vyrobce, tb_model, tb_obsah.

    Tak a zde je onen problém:

    A)První select je naplněn z tb_vyrobce pomocí dotazu:"SELECT id_vyrobce,nazev_vyrobce FROM tb_vyrobce ORDER BY nazev_vyrobce ASC". Hle a tady ke kartezkemu součinu nedochází a jména jednotlivých výrobců se neopakují!!

    B)U druhého select.boxu je to jasné, na základě vybraného výrobce volám ty modely, kt. mají specifické id ze select.boxu prvního, pomocí WHERE!

    C)Třetí select.box se naplňuje řádky z tb_obsah, dotaz je úplně stejný jako u prvního select.boxu: "SELECT id_obsah, nazev_obsah FROM tb_obsah ORDER BY nazev_obsah ASC" A ZDE DOCHÁZÍ K TOMU KARTÉZKÉMU SOUČINU - PROČ?
    Snad se tady neztratím...:))
    22.12.2005 17:39 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Kartézký součin
    "C)Třetí select.box se naplňuje řádky z tb_obsah, dotaz je úplně stejný jako u prvního select.boxu: "SELECT id_obsah, nazev_obsah FROM tb_obsah ORDER BY nazev_obsah ASC" A ZDE DOCHÁZÍ K TOMU KARTÉZKÉMU SOUČINU - PROČ?"

    Tam může jen těžko dojít k součinu. V první řadě vyvíráš z jediné tabulky. Máš tam správná data?
    derddddd avatar 22.12.2005 17:43 derddddd | skóre: 4 | blog: lama_log | Pisek
    Rozbalit Rozbalit vše Re: Kartézký součin
    myslíte datový typ?
    Snad se tady neztratím...:))
    22.12.2005 18:27 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
    Rozbalit Rozbalit vše Re: Kartézký součin
    Ne, ta přímo data... Jsou správná?
    derddddd avatar 22.12.2005 18:40 derddddd | skóre: 4 | blog: lama_log | Pisek
    Rozbalit Rozbalit vše Re: Kartézký součin
    Děkuji všem za rady....! Vám Kyosuke děkuji za upřesnění pojmu "kartézský součin"! Ještě si o tom něco určitě přečtu! Problém je vyřešen, alespoň se zdá býti vyřešen!

    Ano chyba nebyla v db, ale ve spatne napsanem dotazu:

    $query="SELECT id_obsah, nazev_obsah, id_palivo, nazev_palivo FROM tb_obsah_motoru,tb_palivo ORDER BY nazev_obsah";
    nyní se vypisujou data opakovaně a to, že násobkem je počet řádků v tb

    Po "promazání":
    $query="SELECT id_obsah, nazev_obsah FROM tb_obsah_motoru ORDER BY nazev_obsah";

    Sice to zatim naplní jenom select.box - obsah motoru, ale zato správně(jeden udaj - jedna radka), pouze řádek po řádku
    Snad se tady neztratím...:))
    22.12.2005 21:04 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Kartézký součin
    "FROM tb_obsah_motoru,tb_palivo"

    Když se nezadá pravidlo spojení, generuje se opravdu kartézský součin. To je zcela v pořádku (a podle normy), protože databázový server požedované pravidlo spojení hádat nebude. ;-)
    23.12.2005 02:40 Pmx
    Rozbalit Rozbalit vše Re: Kartézký součin
    V tb_auto se mi zdá zbytečné uvádět výrobce, protože ten je určen modelem auta, takže je to tam vlastně dvakrát a může dojít k nekonzistenci dat...
    derddddd avatar 23.12.2005 06:56 derddddd | skóre: 4 | blog: lama_log | Pisek
    Rozbalit Rozbalit vše Re: Kartézký součin
    Zajímavé, myslíte, tedy při zápisu auta do tb_auta by se hodnota do slouce vyrobce:

    Neměla zapisovat - prostě smáznout sloupec vyrobce z tabulky tb_auto.

    Proč?

    tb_vyrobce - pouhý seznam výrobců (indexem se váže k určitému modelu v tb_model)
    tb_model - seznam modelů s id vázáný k tb_vyrobce
    tb_auto - sběrač dat, při přidávání auta dojde ke třem krokům:

    1) (pridat_auto_krok1.php) - načtení do select.boxu z tb_vyrobce, vybrání a zápis hodnoty value z option do proměnné $carMaker
    2) (pridat_auto_krok2.php)na základě proměnné $carMaker(což je číselná hodnota, kt. koliduje s hodnotou id_vyrobce v tb_vyrobce) se dosadí do dotazu na model a to v "SELECT id_model, nazev_model FROM tb_model WHERE vyrobce_id=$carMaker ORDER BY nazev_model ASC". A tím diferencuji modely, kt. se načtou zase do select.boxu - opakuje se zápis proměnné do $carModel
    3)(pridat_auto_krok3.php) - uložím tyto 2 proměnné do <input type="hidden"> a jdu vyplnit 3 formulář s dalšími vlastnostmi auta... poté odesílám (kontrola_pridani_auta.php)

    ### kontrola_pridani_auta.php - je vlastně již vizuální kontrola dat (výpis proměnných z input-hidden) pro obsluhu - poté odeslat a zápis do tb_auto.

    Tak takhle realizuji zápis nového vozidla do db. Musím říct, že já jsem osobně spokojen, neboť to odpovídá mým nynějším znalostem... tím víc žádám o nelítostnou kritiku a další upozornění na nedostatky či chyby...

    Shrnutí:
    Vše realizuji ve 3 krocích pomocí třích formulářů, ze kt. ukládám proměnné do input/hidden, kt. zpětně obsluze ukazuji s možností zpětného kroku k opravě. První krok je vybrání výrobce, druhý modelu a třetí dalších vlastností(např. karoserie, barva, obsah motoru, vykon atd.)
    Snad se tady neztratím...:))
    derddddd avatar 23.12.2005 07:02 derddddd | skóre: 4 | blog: lama_log | Pisek
    Rozbalit Rozbalit vše Re: Kartézký součin
    OPRAVA:
    3)...uložím tyto 2 proměnné do <input type="hidden">...
    Do input/hidden ukládám už v 2 kroku.
    Snad se tady neztratím...:))
    derddddd avatar 22.12.2005 19:22 derddddd | skóre: 4 | blog: lama_log | Pisek
    Rozbalit Rozbalit vše Re: Kartézký součin
    pane bravenec, ve vašem příspěvku nerozumím několika věcem,...neva zjistíme, ale přecejenom vás žádám o popsani těchto řádek, za předpokladu, že ten výklad popíšu mylně:

    create table tabulka_auta ( .... id_palivo int4 references tabulka_paliva(id_palivo) on update cascade on delete cascade .... mám tomu rozumět, že syntaxe je:

    název sloupce datova hodnota references jmeno_tabulky(název_sloupce, z jiné tabulky?-nevím)on update cascade on delete cascade
    Snad se tady neztratím...:))
    23.12.2005 01:31 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Kartézký součin
      create table TBL2(
        ...
        COL2 <typ> references TBL1(COL1)
        ...
      );
    
    znamená, že hodnota sloupce COL2 musí odpovídat některé hodnotě sloupce COL1 v tabulce TBL1 (nebo být NULL - podle okolností). Zápis
      create table TBLB(
        ...
        foreign key (COLB1,...,COLBn) references TBLA(COLA1,...,COLAn)
        ...
      );
    
    znamená, že v každém řádku tabulky TBLB musejí hodnoty sloupců COLB1,...,COLBn odpovídat hodnotám sloupců COLA1,...,COLAn v některém řádku tabulky TBLA.

    Přidáte-li 'on update cascade', při změně odkazovaných hodnot v tabulce TBLA se odpovídajícím způsobem změní i shodné hodnoty v tabulce TBLB (jinak byste dostal chybu "violation of foreign key ..."). Analogicky 'on delete cascade' při smazání řádku v tabulce TBLA smaže odpovídající řádky v TBLB a 'on delete set null' nastaví hodnoty na NULL.

    Petr Bravenec avatar 23.12.2005 11:05 Petr Bravenec | skóre: 43 | blog: Bravenec
    Rozbalit Rozbalit vše Re: Kartézký součin

    No a ještě bych měl jednu připomínku k textu, který jsem napsal včera: v tomto konkrétním případě bych použil nikoli cascade, ale no action - pak nejde smazat žádné palivo, na které v databázi některé auto jezdí.

    K vašemu stylu zápisu sql dotazů: dlouho jsem ani z příspěvků nechápal, jak dovedete v tak primitivním dotazu vyrobit karteziánský součin - mě se to nestává, vyrobím něco podobného jen zcela vyjímečně. Proti podobným chybám můžu doporučit, abyste vždy zadával všechny všechny tabulky, ze kterých taháte byť i jediný sloupec a dával jim vždy aliasy:

    select a.*, b.sloupec2
      from tabulka1 a
      left join tabulka2 b using(klic);
    

    Při takovém stylu zápisu je možnost vzniku kartezského součinu nižší - při překlepech bývá takto zapsaný dotaz nefunční, neproběhne.

    Aut, která takto v databázi evidujete, asi nebude mnoho, karteziánský součin vám pouze znepříjemní výstupy. V databázi s milióny záznamů je karteziánský součin mnohem větší legrace - vede to k dotazům, které server není schopen zvládat.

    Petr Bravenec - Hobrasoft s.r.o.
    derddddd avatar 23.12.2005 13:15 derddddd | skóre: 4 | blog: lama_log | Pisek
    Rozbalit Rozbalit vše Re: Kartézký součin
    však ano, učím se...aliasy - to myslíte -> tb_obsah.id_obsah

    myslíte, že "povedeny" kartézký součin, lze využit k útoku, je to vůbec možné? teda asi jo, ale to musi utočnik znat strukturu db, a když už ji zna, tak je většinou již uvnitř.
    Snad se tady neztratím...:))
    23.12.2005 15:00 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Kartézký součin
    K útoku? Tím může tak maximálně vývojář zaútočit na vlastní stroj. :-D

    A ten alias, to je to "FROM dlouha_tabulka_1 t1, dlouha_tabulka_2 t2" s tím, že všude jinde v dotazu kromě FROM klauzule se použije už jen to t1 a t2. ;-)
    23.12.2005 17:13 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Kartézký součin
    Dodal bych, že jakmile je v joinu potřeba mít dvě instance stejné tabulky, bez aliasů to nejde. Osobně se je snažím používat vždy, výjimkou jsou pouze jednodušší dotazy nad jednou tabulkou, kde je z obvykle pohodlnosti vynechávám (a pak si za to obvykle nadávám, když je k tomu potřeba něco přijoinovat).

    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.