Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Mysql, INSERT o UPDATE

  1. #1

    Mysql, INSERT o UPDATE

    Vorrei aggiornare delle tabelle mysql verificando se il campo esiste già...e se non esiste aggiungerlo!
    Mi spiego meglio!
    La mia tabella ha i seguenti campi:

    codice:
    CREATE TABLE `campimaschera` (
      `id` tinyint(4) unsigned NOT NULL auto_increment,
      `idmaschera` tinyint(4) unsigned NOT NULL default '0',
      `nomemaschera` varchar(128) collate latin1_bin NOT NULL default '',
      `campo` varchar(7) collate latin1_bin NOT NULL default '',
      `nomecampo` varchar(255) collate latin1_bin default NULL,
      `tipocampo` varchar(16) collate latin1_bin default NULL,
      `opzioni` text collate latin1_bin,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
    e all'interno posso avere i seguenti dati:

    codice:
    INSERT INTO `campimaschera` (`id`, `idmaschera`, `nomemaschera`, `campo`, `nomecampo`, `tipocampo`, `opzioni`) VALUES
    (1, 1, 'Progettazione', 'campo1', 'Oggetto', 'text', ''),
    (2, 1, 'Progettazione', 'campo2', 'Protocollo', 'text', ''),
    (3, 1, 'Progettazione', 'campo3', 'Data', 'data', ''),
    (4, 1, 'Progettazione', 'campo4', 'Destinatario', 'text', ''),
    (5, 1, 'Progettazione', 'campo5', '', '', ''),
    (6, 1, 'Progettazione', 'campo6', '', '', ''),
    (7, 1, 'Progettazione', 'campo7', '', '', ''),
    (8, 1, 'Progettazione', 'campo8', 'Ubicazione', 'text', ''),
    (9, 2, 'Amministrazione Fatture Attive', 'campo1', 'Denominazione Cliente', 'text', ''),
    (10, 2, 'Amministrazione Fatture Attive', 'campo2', 'C.F. Cliente', 'text', ''),
    (11, 2, 'Amministrazione Fatture Attive', 'campo3', 'Partita IVA Cliente', 'number', ''),
    (12, 2, 'Amministrazione Fatture Attive', 'campo4', 'Data Fattura', 'data', ''),
    (13, 2, 'Amministrazione Fatture Attive', 'campo5', 'Numero Fattura', 'number', ''),
    (14, 2, 'Amministrazione Fatture Attive', 'campo6', 'Oggetto fornitura/prestazioni', 'text', ''),
    (15, 2, 'Amministrazione Fatture Attive', 'campo7', 'Importo', 'valuta', ''),
    (16, 2, 'Amministrazione Fatture Attive', 'campo8', 'Ubicazione', 'text', ''),
    (17, 3, 'Amministrazione Fatture Passive', 'campo1', 'Denominazione Fornitore', 'text', ''),
    (18, 3, 'Amministrazione Fatture Passive', 'campo2', 'C.F. Fornitore', 'text', ''),
    (19, 3, 'Amministrazione Fatture Passive', 'campo3', 'Partita IVA Fornitore', 'number', ''),
    (20, 3, 'Amministrazione Fatture Passive', 'campo4', 'Data Fattura', 'data', ''),
    (21, 3, 'Amministrazione Fatture Passive', 'campo5', 'Numero Fattura', 'number', ''),
    (22, 3, 'Amministrazione Fatture Passive', 'campo6', 'Oggetto fornitura/prestazioni', 'text', ''),
    (23, 3, 'Amministrazione Fatture Passive', 'campo7', 'Importo', 'valuta', '');
    ORA CIO' CHE DOVREI FARE E' AD ESEMPIO AGGIORNARE I DATI CHE CI SONO, E SE UN CAMPO NON ESISTE AGGIUNGERLO!!!

    Oh trovato l'opzione INSERT ... ON DUPLICATE KEY UPDATE ma non mi funziona.... ho provato a fare questo INSERT :

    codice:
    INSERT INTO campimaschera (idmaschera, nomemaschera, campo, nomecampo, tipocampo, opzioni) VALUES (3, 'Amministrazione Fatture Passive', 'campo7', 'Ubicazione / Responsabile', 'text', '') ON DUPLICATE KEY UPDATE idmaschera = 3 AND campo = 'campo7';
    
    INSERT INTO campimaschera (idmaschera, nomemaschera, campo, nomecampo, tipocampo, opzioni) VALUES (30, 'Segreteria Generale', 'campo10', 'Ubicazione / Responsabile', 'text', '') ON DUPLICATE KEY UPDATE idmaschera = 30 AND campo = 'campo10';
    nel primo caso dovrebbe aggiornare la riga con idmaschera = 3 e il campo = campo7
    mentre nel secondo caso dovrebbe aggiungere il campo10
    ma non funziona nessuna delle 2

    Qualcuno ha qualche idea da suggerire?

  2. #2
    in UPDATE i campi da aggiornare sono divisi da un virgola e non da un AND.

    ON duplicate key cerca una chiave UNIQUE oppure una chiave primaria gia' esistente e mi pare che nella tua query ci sia nessuna delle due.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Originariamente inviato da piero.mac
    in UPDATE i campi da aggiornare sono divisi da un virgola e non da un AND.

    ON duplicate key cerca una chiave UNIQUE oppure una chiave primaria gia' esistente e mi pare che nella tua query ci sia nessuna delle due.
    Ecco perchè non funzionava....quindi senza chiavi univoche non posso usare questo metodo?
    Sono per forza costretto a fare prima la SELECT e poi decidere se fare l'INSERT o l'UPDATE?
    Non posso usare un'unica riga di comando?

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.