Dnes: 17. srpna 2017    | Registrace | Hledáme | Redakce | Info | Testy | Školení | Ocenění | Nápověda | Čtenář: nepřihlášen

Rychlé odkazy
  • Hlavní stránka
  • Seznam rubrik
  • Ankety
  • Editoriály
  • TOP 15
  • KONFERENCE 2008
  • KONFERENCE 2007
  • KONFERENCE 2006
  • KONFERENCE 2005
  • KONFERENCE 2004
  • Sborník
  • Testy
  • Virtuální školení
  • Personalizace


  • Hledáte práci?
    Hledáme redaktora - pojďte s námi tvořit Databázový svět!

    Vyhledávání

    Hledej
    na Databázovém světě!



    Rozšířené vyhledávání

    Rubriky
    Aktuality
    Bezpečnost
    Business
    Česká scéna
    Datové sklady
    Dokumentace
    Dotazovací jazyky
    Hardware
    Historie
    Komentáře
    Literatura
    Metodologie
    Nondb
    Open Source
    Poradna
    Produkty
    Případové studie
    Redakce
    Rozhovory
    Standardy
    Technologie
    Tipy - triky
    Tiskové zprávy
    Vývoj
    Vývojové nástroje
    Zajímavosti

    Co je to?
    Databázový stroj
    (Database Engine)

    Pod pojmem Database Engine (tedy pod databázovým strojem) se obvykle rozumí jádro databázového serveru a základní obslužné programy tohoto jádra (například zajišťující vzdálené připojení uživatelů). Lze tedy říci, že databázový stroj je podmnožinou databázového serveru, přičemž pod pojmem databázový server je nutné vidět vybavení (typicky softwarové) pracující nad danou databází a zajišťující veškeré činnosti (včetně všech potřebných komunikací), které nad danou databází mají být zajišťovány.

    Akce
    Dynamická Datová Centra
    - na semináři se seznámíte s komplexním řešením a koncepcí Dynamických Datových Center od Fujitsu Siemens Computers se speciálním důrazem na řešení FlexFrame.

    Textová inzerce
    IBPhoenix - Vše o InterBase a Firebirdu.

    Smějete se rádi? - Pak je pro vás Vtipník to pravé!

    Prodejce reklamy - Hledáme schopného prodejce reklamního prostoru, možnost i externí spolupráce.

    Přihlášený čtenář
    Nepřihlášený čtenář

    O portálu
    Databázový svět
    ISSN: 1213-5933

    Web je optimalizován pro rozlišení 1024x768, nicméně kromě větších rozlišení podporujeme i 800x600. Podrobnosti najdete zde.

    Chcete-li mít kdykoliv možnost zkontrolovat obsah našeho portálu, můžete využít podporu rss. Podrobnosti najdete zde.
    Jak na ankety ve Firebirdu potřetí


    [Vývoj] - Různé ankety na internetu jsou již běžnou záležitostí. Dovolují vám získat informace o tom, co si návštěvníci webu přejí, co je zajímá či v případě softwaru jakou funkci nejvíce postrádají. Stejně tak, jako jsou běžné ankety, jsou běžné i různé návody na jejich vytvoření. Nejčastější kombinace, kterou nalezneme v návodech je využití PHP a nějakého formátu souboru pro uložení dat, případně MySQL. My si v tomto krátkém seriálu ukazujeme, jak vytvářet ankety za pomoci pouze databázové platformy Firebird. Zbývá nám ještě ukázat jiný způsob ošetření vícerého hlasování a samozřejmě modifikace pro hlasování pouze pro jednu možnost.



    Jak jsme již nastínili v předchozím pokračování, mohlo se někomu zdát použití uložených procedur příliš monstrózní. Celý proces vkládání by se dal samozřejmě ošetřit například pomocí triggerů, které Firebird také podporuje.

    Stačilo by před vkládáním otestovat (before insert trigger), jestli daná IP adresa již není pro poslední časový interval zanesena (eventuelně navíc zakomponovat číslo odpovědi) a případně vyvolat výjimku apod.

    Použití triggerů je nesporně mnohem jednodušší, než vymýšlet uložené procedury, nicméně toto použití nás velice svazuje. Pokud budeme chtít u každé ankety jiný časový interval, případně jinou možnost hlasování (více voleb vs. pouze jedna volba), začínají být triggery spíše na obtíž – nutnost editace pro každou anketu apod. Použijeme-li uložené procedury, stačí si pak jen vybrat, jaký výsledek chceme z databáze získat bez ohledu na jiné parametry.

    Modifikujme tedy naši uloženou proceduru tak, aby vracela počet hlasování – a to pouze pro jedinou možnou odpověď uživatele (není možné hlasovat pro X a Y, započítá se pouze první z nich). Výsledek může vypadat například takto:

    SET TERM ^ ;
    
    CREATE PROCEDURE ANKETA_HLASY_Z_ANKETY_SINGLE (
        ID_ODPOVED INTEGER)
    RETURNS (
        SOUCET INTEGER)
    AS
    DECLARE VARIABLE DATUM DATE;
    DECLARE VARIABLE IP CHAR(15);
    DECLARE VARIABLE CAS TIME;
    DECLARE VARIABLE SUB_POCET INTEGER;
    DECLARE VARIABLE POCET INTEGER;
    DECLARE VARIABLE ID_ANKETA INTEGER;
    BEGIN
      soucet 
    
    = 0;
    
      /* pro zajisteni, ze hledame v odpovedich 
    
    jedne ankety */
      SELECT FIRST 1 id_anketa FROM anketa_odpovedi WHERE id=:ID_ODPOVED
        INTO :ID_ANKETA;
    
      /* pujdeme pekne po casovem useku */
      FOR 
    
    SELECT DISTINCT CAST(cas AS DATE) FROM anketa_hlasovani
        WHERE id_odpoved=:ID_ODPOVED
        INTO :DATUM
      DO
      BEGIN
        pocet 
    
    = 0;
        /* pro kazdou IP vyber minimalni datum 
    
    */
        FOR 
    
    SELECT DISTINCT ip, MIN(CAST(cas AS TIME)) FROM anketa_hlasovani
          WHERE id_odpoved=:ID_ODPOVED AND CAST(cas AS DATE)=:DATUM
          GROUP BY ip
          INTO :IP, :CAS
        DO
        BEGIN
          /* a pokud neni zadna IP pred ni 
    
    (casove) zapocitej tuto IP */
          SELECT COUNT(ip) FROM anketa_hlasovani
            WHERE ip=:IP
            AND id_odpoved<>:ID_ODPOVED AND id_odpoved IN
                 (SELECT id FROM anketa_odpovedi WHERE id_anketa=:ID_ANKETA)
            AND CAST(cas AS TIME)<:CAS 
    
    AND CAST(cas AS DATE)=:DATUM
            INTO :SUB_POCET;
           IF (:SUB_POCET<1) THEN
             pocet =  pocet + 1;
        END
        soucet = soucet + pocet;
      END
      SUSPEND;
    END
    
    ^
    
    SET TERM ; ^
    
    Jak vidíte, procedura se nám celkem rozrostla (a určitě je možné ji zoptimalizovat jak délkově tak pro větší výkon), nicméně při používání si stále můžete vybrat jaký typ ankety chcete "vyhodnocovat". Jak procedura funguje? Začínáme opět standardním postupem rozmělněním na časové úseky. A poté pro každou IP adresu, ze které bylo hlasováno vybereme minimální datum, následně ověříme, že není již v tomto časovém úseku jiný hlas. Je-li tomu tak, připočítáme si jeden hlas. Hlasy se potom sčítají do celkového součtu.


    Související články:
    Jak na ankety ve Firebirdu podruhé (07.11.2005)
    Jak na ankety ve Firebirdu poprvé (22.10.2005)

    ( Celý článek! | Autor: Jiří Činčura | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

    Anketa
    Kolik ročně utratíte za dovolené?

    Nic 
     (1392 hl.)
    Do 1 000,- Kč 
     (979 hl.)
    Do 10 000,- Kč 
     (924 hl.)
    Do 25 000,- Kč 
     (1179 hl.)
    Do 50 000,- Kč 
     (938 hl.)
    Do 75 000,- Kč 
     (1077 hl.)
    Více než 75 000,- Kč 
     (922 hl.)

    Celkem hlasovalo: 7411


    Poslední komentáře
    frontierd@126.com
    frontierd@126.com
    frontierd@126.com
    c
    http://www.coachoutl

    Newsletter
    Přihlaste si nezávazně - i bez registrace - odběr informačního newsletteru. Podrobné informace najdete zde.

    Emailová adresa:


    Kalendář
    <<  Srpen  >>
    PoÚtStČtSoNe
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   

    Redakci připojuje


    Nejčtenější

    Databáze je prázdná!


    Nejvíce komentářů

    Databáze je prázdná!


    Reklama






    Nenechte si ujít články na dalších webech




    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.

    Databázový svět | dfKlub - digitální fotografie | Vtipník - vtipy přímo k Vám | Reminder - přestaňte zapomínat | Databázový svět

    Copyright (c) 2004 AVRE Publishing, spol. s r.o. Všechna práva vyhrazena