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

    [MySql]INSERT senza inserire doppioni

    Buon giorno a tutti, vorrei sapere cortesemente come faccio ad evitare di inserire doppioni nella tb_team.
    Ho due tabelle webcal_user_new e tb_team.
    Seleziono dei valori da webcal_user_new e li voglio inserire in tb_team.
    Fin qui tutto ok.
    Ma, se nella tb_team ho già dei record che hanno gli stessi valori,non vorrei inserirli nuovamente.

    Ho trovato questa query:
    codice:
    select A.id_user from webcal_user_new A where A.id_user not in (select B.id_user from tb_team b)
    In questo modo funziona,perchè mi tira fuori quei record che non sono presenti nella tb_team.

    Invece questa è l'insert che eseguo normalmente:
    codice:
    INSERT INTO tb_team(id_team,cal_sponsor_id,id_user) 
    VALUES 
    ("T_28","28","33")
    Come faccio a coniugare le due cose?
    Grazie mille.

  2. #2
    Se metti un unique key sui campi che non possono essere duplicati nella tabella, ottieni che quando cerchi di inserire dati già esistenti non li metterà....

  3. #3
    praticamente ho reso unique key il campo id_user,ha eseguito l'insert senza inserire il valore già presente nella tb_team, ma...mi ha restituito questo errore:
    codice:
    Duplicate entry '36' for key 2
    cosa significa?

  4. #4
    Originariamente inviato da ANTAGONIA
    praticamente ho reso unique key il campo id_user,ha eseguito l'insert senza inserire il valore già presente nella tb_team, ma...mi ha restituito questo errore:
    codice:
    Duplicate entry '36' for key 2
    cosa significa?
    Ti avvisa appunto che stai cercando di inserire un record che esiste già.....
    e quindi non te lo ha inserito...
    ora ti basta fare in modo di ignorare questi messaggi, cioè quando ottieni il messaggio passi alla insert successiva..

  5. #5
    ok fatto come mi dicevi in questo modo:
    da cosi:
    Codice PHP:
    $rsInTeammysql_query($sqlInTeam) or die ("Impossibile connettersi!" mysql_error()); 
    a cosi:
    Codice PHP:
    $rsInTeammysql_query($sqlInTeam); 
    solo che, togliendo la gestione dell'errore, se dovessi avere dei problemi, non saprò più cosa c'è che non va.
    Sai per caso a come ovviare?
    grazie mille

  6. #6
    Originariamente inviato da ANTAGONIA
    ok fatto come mi dicevi in questo modo:
    da cosi:
    Codice PHP:
    $rsInTeammysql_query($sqlInTeam) or die ("Impossibile connettersi!" mysql_error()); 
    a cosi:
    Codice PHP:
    $rsInTeammysql_query($sqlInTeam); 
    solo che, togliendo la gestione dell'errore, se dovessi avere dei problemi, non saprò più cosa c'è che non va.
    Sai per caso a come ovviare?
    grazie mille
    Certo
    la gestione dell'errore la devi ovviamente tenere solo che deve scattare per tutti gli errori TRANNE quello delle righe duplicate.

    più o meno così:
    Codice PHP:

    $rsInTeam
    =  mysql_query($sqlInTeam);
    if (!
    rsInTeam
    {
        if (
    mysql_errno() != 1586) die ("Impossibile connettersi!"  mysql_error());
       

    qui puoi vedere la lista degli errori che restituisce mySql e vedrai che 1586 è proprio l'errore che interessa noi:
    http://dev.mysql.com/doc/refman/5.1/...es-server.html


    vorrei aggiungere che c'è un'altra maniera di evitare i duplicati:
    fare una select prima per vedere se il record c'è e fare la insert solo in caso negativo, però a occhio direi che questa seconda maniera è meno performante ....

  7. #7
    Anzi ora che ci penso c'è una terza maniera che è la più performante di tutte:

    INSERT IGNORE INTO....

    facendo così ti scarta la insert duplicata e non ti solleva neppure l'errore 1586,
    quindi puoi tenere il tuo codice come era prima e modificare solo il comendo sql da INSERT INTO a INSERT IGNORE INTO

  8. #8
    cioè SPETTACOLARE.....ti ringrazio sei stato molto gentile alla prox

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.