Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 14 su 14
  1. #11
    Originariamente inviato da Giakie
    sono riuscito a farlo quasi tutto, mi dà però un errore nell'ultima riga, dove c'è l'END, e non so propio perchè

    provo a postare il codice, magari qualcno sa darmi un aiuto..

    grazie
    Guarda la <==== nella riga sotto:
    non manca l'apice di chiusura prima del punto e virgola?

    codice:
    UPDATE `index` SET num = num + 1, size = size + NEW.size WHERE email = 'giacomo;<====
    END IF;
    END;
    //
    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  2. #12
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    60
    purtroppo no, è stato solo un errore di inserimento; in quella che ho provato fino ad un secondo fa c'è l'apice di chiusura..

    il codice corretto è questo:
    DELIMITER //

    CREATE TRIGGER `updateindex`
    AFTER INSERT ON `dominioprova_it@giacomo`
    FOR EACH ROW

    BEGIN

    DECLARE tipomsg tinyint;
    SET tipomsg = NEW.`IN`;

    IF NOT EXISTS ( SELECT * FROM `index` WHERE email = 'giacomo' AND dominio = 'dominioprova.it' AND anno = DATE_FORMAT(NOW(),'%Y') AND mese = DATE_FORMAT(NOW(),'%m'))
    THEN

    IF (tipomsg = 1 ) THEN /* E' un messaggio in ingresso */
    INSERT INTO `index` ( index_id, email, dominio, `type`, num, size, anno, mese )
    VALUES ('', 'giacomo', 'dominioprova.it', `in`,1, NEW.size,DATE_FORMAT(NOW(),'%Y'),DATE_FORMAT(NOW() ,'%m'));

    INSERT INTO `index` ( index_id, email, dominio, `type`, num, size, anno, mese )
    VALUES ('', 'giacomo', 'dominioprova.it', `out`, 0, 0, DATE_FORMAT(NOW(),'%Y'), DATE_FORMAT(NOW(),'%m'));

    ELSE IF (tipomsg = 0 ) THEN
    INSERT INTO `index` ( index_id, email, dominio, `type`, num, size, anno, mese )
    VALUES ('', 'giacomo','dominioprova.it',`in`,0,0,DATE_FORMAT(N OW(),'%Y'),DATE_FORMAT(NOW(),'%m'));

    INSERT INTO `index` ( index_id, email, dominio, `type`, num, size, anno, mese )
    VALUES ('', 'giacomo', 'dominioprova.it', `out`, 1, NEW.size, 2008, 01);

    ELSE

    SET tipomsg = NEW.`IN`;

    IF (tipomsg = 1 ) THEN
    UPDATE `index` SET num = num + 1, size = size + NEW.size WHERE email = 'giacomo';

    ELSE

    UPDATE `index` SET num = num + 1, size = size + NEW.size WHERE email = 'giacomo';

    END IF;
    END;//
    Non esiste niente di più serio dell'arte; e non esiste niente di meno serio dell'artista. (O.Wilde)

  3. #13
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    60
    Ce l'ho fatta! aggiungendo pezzo a pezzo.. mancavano gli END IF dei cicli annidati; li avevo inseriti all'inizio, ma poi li avevo tolti perchè mi davano errore... mah, cosa strana; sono evidenziati nel codice, potesse servire a qualcuno

    grazie ancora
    ciao

    DELIMITER //

    DROP TRIGGER IF EXISTS updateindex//

    CREATE TRIGGER `updateindex`
    AFTER INSERT ON `dominioprova_it@giacomo`
    FOR EACH ROW

    BEGIN

    DECLARE tipomsg tinyint;
    SET tipomsg = NEW.`IN`;

    IF NOT EXISTS ( SELECT * FROM `index` WHERE email = 'giacomo' AND dominio = 'dominioprova.it' AND anno = DATE_FORMAT(NOW(),'%Y') AND mese = DATE_FORMAT(NOW(),'%m'))
    THEN

    IF (tipomsg = 1 ) THEN

    INSERT INTO `index` ( index_id, email, dominio, `type`, num, size, anno, mese )
    VALUES ('', 'giacomo', 'dominioprova.it', `in`,1, NEW.size,DATE_FORMAT(NOW(),'%Y'),DATE_FORMAT(NOW() ,'%m'));

    INSERT INTO `index` ( index_id, email, dominio, `type`, num, size, anno, mese )
    VALUES ('', 'giacomo', 'dominioprova.it', `out`, 0, 0, DATE_FORMAT(NOW(),'%Y'), DATE_FORMAT(NOW(),'%m'));

    ELSE
    INSERT INTO `index` ( index_id, email, dominio, `type`, num, size, anno, mese )
    VALUES ('', 'giacomo','dominioprova.it',`in`,0,0,DATE_FORMAT(N OW(),'%Y'),DATE_FORMAT(NOW(),'%m'));

    INSERT INTO `index` ( index_id, email, dominio, `type`, num, size, anno, mese )
    VALUES ('', 'giacomo', 'dominioprova.it', `out`, 1, NEW.size, 2008, 01);
    END IF; /* <==== */

    ELSE
    SET tipomsg = NEW.`IN`;

    IF (tipomsg = 1 ) THEN
    UPDATE `index` SET num = num + 1, size = size + NEW.size WHERE email = 'giacomo';

    ELSE

    UPDATE `index` SET num = num + 1, size = size + NEW.size WHERE email = 'giacomo';

    END IF; /* <==== */

    END IF;
    END;//

    DELIMITER ;
    Non esiste niente di più serio dell'arte; e non esiste niente di meno serio dell'artista. (O.Wilde)

  4. #14
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    60
    essendoci pochissima documentazione online, aggiungo una info per chi avesse la necessità (come me) di creare trigger o stored procedures da php: la shell_exec mi ha dato parecchi problemi, ma si può utilizzare un normale mysql_query; la sola cosa da fare è eliminare i delimiter e tutti i delimitatori utilizzati (nell'esempio "//").

    Si potrebbero usare anche le classi mysqli ma devono essere installate e funzionano solo con PHP dalla versione 4.1 in poi.

    ciao
    Non esiste niente di più serio dell'arte; e non esiste niente di meno serio dell'artista. (O.Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.