Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Trigger per MySql

  1. #1

    Trigger per MySql

    Ciao a tutti e grazie per la pazienza da subito.

    Ho una tabella in cui ho elencato alcuni prodotti ripartiti secondo la tipologia dal campo
    'id_tipo di prodotto' e un campo 'ordine' che contiene appunto l'ordine con cui
    voglio appaiano nei listini.
    Di tanto in tanto alcuni prodotti vengono eliminati dal listino. Nella tabella ho quindi inserito un
    campo 'eliminato' che marchia questi prodotti col valore '0' (prodotto a listino) oppure '1' (prodotto fuori listino).
    Io vorrei fare in modo che quando cambio il valore del campo 'eliminato' da '0' a '1', tutti i
    prodotti successivi di quel determinato tipo salissero di una posizione nel campo 'ordine'. Ho quindi creato questo trigger:

    Codice PHP:
    CREATE TRIGGER "database_listino"."correggi_ordine" AFTER UPDATE ON "database_listino"."prodotti"
      
    FOR EACH ROW BEGIN
        
    IF new.eliminato='1' THEN
        UPDATE prodotti SET ordine 
    ordine 1  
        WHERE 
    (id_tipo_prodotto=OLD.id_tipo_prodotto AND ordine>OLD.ordineORDER BY ordine;
        
    end if;
    END
    Al tentativo di marchiare il prodotto come eliminato, però, il database risponde così:

    Errore query SQL # 1442 Can't update table 'prodotti' in stored function/trigger
    because it is already used by statement which invoked this stored function/trigger.
    Qualcuno mi sa dire dove sbaglio e come rimediare?

    Grazie mille!

    Rupert

  2. #2
    Utente di HTML.it L'avatar di kodode
    Registrato dal
    Sep 2002
    Messaggi
    1,896
    io farei due tentativi:

    1) mettere NEW al posto di new ( anche se non credo sia questo il problema)
    2) provare a fare l'update senza la condizione where (queste serve a cerercare dove sta l'intoppo)

  3. #3
    Originariamente inviato da kodode
    io farei due tentativi:
    1) mettere NEW al posto di new ( anche se non credo sia questo il problema)
    Fatto. Nessun cambiamento.
    2) provare a fare l'update senza la condizione where (queste serve a cerercare dove sta l'intoppo)
    Non posso togliere la condizione WHERE. Il campo ordine e id_tipo_prodotto insieme costituiscono un indice univoco. Se tolgo la condizione, tutti gli articoli con lo stesso ordine (ma con tipologia diversa) verranno diminuiti di una unità. Il db darà errore di violazione dell'indice.

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Non c'è rimedio.
    L'errore è chiaro: non puoi fare un update sulla stessa tabella che ha scatenato il trigger.
    Piuttosto chiediti a cosa ti serve avere i numeri d'ordine consecutivi...

  5. #5
    Originariamente inviato da luca200
    Non c'è rimedio.
    L'errore è chiaro: non puoi fare un update sulla stessa tabella che ha scatenato il trigger.
    Piuttosto chiediti a cosa ti serve avere i numeri d'ordine consecutivi...
    Hai ragione: niente di essenziale, in realtà. Più che altro una questione di ordine e conteggio più agevole.

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