Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [MySQL] controllare l'esistenza di un valore

    Ciao ragazzi,
    avrei bisogno di una mano.
    Sono alle prese con la creazione di una tabella molto grande (circa un milione di tuple).
    Volevo sapere come fare per controllare che una tupla sia stata già inserita nel DB, in modo da non ripetere l'operazione inutilmente.
    Mi spiego meglio:
    ho una tabella formata da 5 campi

    id1 | id2 | valore1 | valore2 | valore3

    Una volta che è stata inserita la tupla avente id1= 100 e id2= 235 è inutile poi inserire la tupla che avrà id1=235 e id2=100 visto che i valori saranno gli stessi.
    Come potete immaginare questo controllo mi serve per dimezzare di fatto la dimensione della tabella.
    Idee?
    Grazie in anticipo
    Testata Giornalistica Online - InfoOggi.it
    IRC Resource - IRC-Zone.org

  2. #2
    cesarino, per vedere se un valore esiste in una tabella si fa una ricerca, no?

    una normalissima SELECT campi FROM tabella WHERE condizione


  3. #3
    Si, effettivamente con una select la cosa è piuttosto semplice.
    Il mio intento era invece quello di provare ad abbozzare qualcosa sfruttando FUNCTION o PROCEDURE anche per imparare qualcosa di nuovo.
    Testata Giornalistica Online - InfoOggi.it
    IRC Resource - IRC-Zone.org

  4. #4
    anche se fai una FUNCTION, pur sempre una SELECT devi eseguire...

  5. #5
    okok, idea bocciata
    Grazie per il suggerimento!
    Testata Giornalistica Online - InfoOggi.it
    IRC Resource - IRC-Zone.org

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    Re: [MySQL] controllare l'esistenza di un valore

    Originariamente inviato da Kaesar83
    Ciao ragazzi,
    avrei bisogno di una mano.
    Sono alle prese con la creazione di una tabella molto grande (circa un milione di tuple).
    Volevo sapere come fare per controllare che una tupla sia stata già inserita nel DB, in modo da non ripetere l'operazione inutilmente.
    Mi spiego meglio:
    ho una tabella formata da 5 campi

    id1 | id2 | valore1 | valore2 | valore3

    Una volta che è stata inserita la tupla avente id1= 100 e id2= 235 è inutile poi inserire la tupla che avrà id1=235 e id2=100 visto che i valori saranno gli stessi.
    Come potete immaginare questo controllo mi serve per dimezzare di fatto la dimensione della tabella.
    Idee?
    Grazie in anticipo
    Con altri database è possibile definire un indice utilizzando direttamente le funzioni greatest() e least() per impostare la reciprocità. Mysql invece non lo permette.

    Potresti utilizzare due trigger, uno pre-inserimento e uno pre-aggiornamento:


    codice:
    create table if not exists prova_trigger (
    id int not null auto_increment primary key,
    id1 int,
    id2 int,
    valore1 int,
    valore2 int,
    valore3 int,
    unique index unico (id1,id2)
    ) engine=myisam;
    
    delimiter //
    create trigger inserimento before insert on prova_trigger
     for each row 
     begin
     declare minimo integer;
     declare massimo integer; 
      set minimo = least(new.id1,new.id2);
      set massimo = greatest(new.id1,new.id2);
      set NEW.id1 = minimo;
      set NEW.id2 = massimo;
      end;
    //
    delimiter ; //
    
    delimiter //
    create trigger aggiornamento before update on prova_trigger
     for each row 
     begin
     declare minimo integer;
     declare massimo integer; 
      set minimo = least(new.id1,new.id2);
      set massimo = greatest(new.id1,new.id2);
      set NEW.id1 = minimo;
      set NEW.id2 = massimo;
      end;
    //
    delimiter ; //
    
    insert into prova_trigger (id1,id2,valore1,valore2,valore3) values (1,2,3,4,5); /* a buon fine*/
    insert into prova_trigger (id1,id2,valore1,valore2,valore3) values (2,3,4,5,6); /* a buon fine*/
    
    insert into prova_trigger (id1,id2,valore1,valore2,valore3) values (2,1,4,5,6);
    /*
    Query : insert into prova_trigger (id1,id2,valore1,valore2,valore3) values (2,1,4,5,6);
    Error Code : 1062
    Duplicate entry '1-2' for key 'unico'
    */
    update prova_trigger set id1 = 2, id2 = 1 where id = 2;
    /*Query : update prova_trigger set id1 = 2, id2 = 1 where id = 2 
    Error Code : 1062
    Duplicate entry '1-2' for key 'unico'
    */

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.