Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [MySQL] Capire se aggiornamento o aggiunta da INSERT IGNORE

    ciao!

    ho questa procedure:
    codice:
    DELIMITER //
    DROP PROCEDURE IF EXISTS import_articoli //
    CREATE PROCEDURE import_articoli(
        IN nome VARCHAR(255),
        IN codice VARCHAR(100),
        IN sku VARCHAR(100),
        IN codice_feed VARCHAR(100),
        IN descrizione MEDIUMTEXT,
        IN tags TEXT,
        IN note MEDIUMTEXT
    )
        NO SQL
    BEGIN
        INSERT IGNORE INTO mp_articoli
        VALUES (NULL, nome, codice, sku, codice_feed, descrizione, tags, note, NOW(), NOW());
        SELECT art_id AS last FROM mp_articoli WHERE art_codice = codice;
    END
    ormai è collaudata e funzionante.
    e viene lanciata all'interno di uno script PHP.

    il cliente mi ha chiesto di inviare una email ogni volta che un articolo viene aggiunto.
    secondo voi come posso identificare se un articolo è stato effetttivamente aggiunto??

  2. #2

  3. #3
    ciao!

    perfetto grazie, faccio qualche test tra oggi e lunedi e vi dico!

  4. #4
    ciao!

    ho creato una tabella apposita per i test:
    • id PK AI
    • nome UQ


    INSERT IGNORE resitituisce 0 se non viene inserito nulla.
    1 se viene effettivamente inserito un record.

    però non posso fare la SELECT, perchè mi darebbe un risultato falsato.

    allora ho pensato di fare così:
    codice:
    DELIMITER //
    DROP PROCEDURE IF EXISTS import_test //
    CREATE PROCEDURE import_test(
        IN valore VARCHAR(255)
    )
        NO SQL
    BEGIN
        INSERT IGNORE INTO a_test
        VALUES (NULL, valore);
        SELECT id AS last
        FROM a_test
        WHERE nome = valore
        UNION ALL
        SELECT LAST_INSERT_ID() AS last_id;
    END
    poi da PHP verificio che last e last_id siano uguali:
    • se lo sono vuole dire che è stato inserito un articolo nuovo
    • sennò no, perchè nel caso di IGNORE last_id è zero


    sto facendo un pò di test, ma sembra funzionare!

  5. #5
    Quote Originariamente inviata da fermat Visualizza il messaggio
    però non posso fare la SELECT, perchè mi darebbe un risultato falsato.
    non ho capito

  6. #6
    questa era la procedure originale:
    codice:
    DELIMITER //
    DROP PROCEDURE IF EXISTS import_articoli //
    CREATE PROCEDURE import_articoli(
        IN nome VARCHAR(255),
        IN codice VARCHAR(100),
        IN sku VARCHAR(100),
        IN codice_feed VARCHAR(100),
        IN descrizione MEDIUMTEXT,
        IN tags TEXT,
        IN note MEDIUMTEXT
    )
        NO SQL
    BEGIN
        INSERT IGNORE INTO mp_articoli
        VALUES (NULL, nome, codice, sku, codice_feed, descrizione, tags, note, NOW(), NOW());
        SELECT art_id AS last FROM mp_articoli WHERE art_codice = codice;
    END
    alla fine c'è quella SELECT.
    da PHP, per verificare la INSERT, devo sostanzialmente fare un rowcount.
    ma se c'è quella SELECT il rowcount non funziona.
    diciamo che è più un discorso di PHP (PDO) che del db in se.
    quindi magari non approfondisco troppo, sennò vado fuori tema!

  7. #7

  8. #8
    Quote Originariamente inviata da optime Visualizza il messaggio
    volendo potresti ritornare più di un valore https://www.mysqltutorial.org/mysql-...ltiple-values/
    ah ottimo non ci avevo pensato.
    potrei anche modificare la procedure.

    grazie!!

  9. #9

  10. #10
    ciao!

    modificata così:
    codice:
    DELIMITER //
    DROP PROCEDURE IF EXISTS import_test //
    CREATE PROCEDURE import_test(
        IN valore VARCHAR(255),
        OUT last INT,
        OUT last_inserted INT
    )
        NO SQL
    BEGIN
        INSERT IGNORE INTO a_test
        VALUES (NULL, valore);
    
    
        SELECT id INTO last
        FROM a_test
        WHERE nome = valore;
    
    
        SELECT LAST_INSERT_ID() INTO last_inserted;
    
    
    #     SELECT id AS last
    #     FROM a_test
    #     WHERE nome = valore
    #     UNION ALL
    #     SELECT LAST_INSERT_ID() AS last;
    END
    poi devo cmq controllare da PHP che i due valori siano uguali/diversi.
    però funziona!

    grazie!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.