Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217

    Aggiornare e fondere due tabelle mysql

    Nella tabella A (elenco alunni) ho le colonne id e nome.
    id | nome
    1 | luca
    2 | marco
    3 | matteo


    Nella tabella B (dettagli alunni) ho ancora id, nome (che corrispondono a quelle della tabella A) e una serie di altre colonne informative.
    id | nome | voto | assenze
    1 | luca | 9 | 10
    2 | marco | 8 | 7
    3 | matteo | 6 | 3


    Ogni anno la tabella A si aggiorna con i nuovi arrivati. Vorrei che i nuovi venissero inseriti nella tabella B.
    Se c'è un'id in A che in B non c'è, allora prendo la riga incriminata e la copio in B . Penso ci vogliano 3 query: la prima estrae le righe da A, la seconda le confronta con ciascuna riga di B, la terza inserisce la riga di A in B se in B è assente.

    Potreste darmi qualche idea in PHP?

  2. #2
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    sorvolando sul fatto che mi sembra una struttura a dir poco rischiosa, e sopratutto che collegare le due tabelle su un campo come il nome ti darà prima o poi problemi (esistono gli omonimi).
    ma in ogni caso per quello che hai chiesto puoi fare tutto con un unica query:

    codice:
    INSERT INTO tabellab (tabellab.nome) SELECT tabellaa.nome FROM tabellaa WHERE tabellaa.nome NOT IN (SELECT tabellab.nome FROM tabellab)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217
    Ti ringrazio. In realtà nella colonna "nome" c'è nome e cognome dell'alunno.

    Ma volevo chiederti: siccome l'id è univoco per ogni alunno, vorrei che il controllo fosse sull'id (così supero anche il problema dell'omonimia). Che dici?

  4. #4
    La struttura del DB non ha alcun senso, non c'è motivo per cui sia così, ti basta un'unica tabella:

    id | nome | voto | assenze
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    sono più che daccordo con satifal, non ha senso avere due tabelle, se proprio devi dividere gli alunno al primo anno dagli altri ti basta mettere aggiungere un campo classe (che probabilmente hai già) e il gioco è fatto, avere due tabelle con gli id uguali è praticamente impossibile, sopratutto quando una delle due tabelle viene svuotata ogni anno ... e di conseguenza riinizia da 1



    P.S. anche con il cognome non sei mica tranquillo, di "Mario Rossi" ce ne sono un milione .... in questi casi si usa il Codice Fiscale (quando servono veramente due tabelle ovviamente)
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217
    Lo so, lo so, ma è così... Purtroppo la tabella A viene aggiornata da un altra persona (la segretaria). Io devo averne una a parte (la B).

    Pensavo di trasformare così:

    codice:
    INSERT INTO tabellab (tabellab.id, tabellab.nome) SELECT tabellaa.id, tabellaa.nome FROM tabellaa WHERE tabellaa.id NOT IN (SELECT tabellab.id FROM tabellab)
    Così il controllo si effettua tramite id: se c'è un'id nuovo in A, mi copia tutti i dati (id e nome) da A a B. Funzia?

  7. #7
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    si così dovrebbe funzionare, a patto ovviamente che "Mario Rossi" abbia l'id 5 in entrambe le tabelle.

    comunque se proprio sei costretto a tenere due tabelle separate almeno aggiungi il codice fiscale in entrambe ... sarà sempre meglio di usare l'id.

    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217
    Non funziona.
    Ho provato a semplificare la query, togliendo condizioni (WHERE) e facendo la copia di un campo solo. In pratica una semplice copia di una colonna dalla tabella a alla tabella b.

    codice:
     $query = "INSERT INTO tabellab (tabellab.id) SELECT tabellaa.id FROM tabellaa"; mysql_query($query, $db);
    Eseguita la query, la tabella b rimane sempre vuota. Cosa sbaglio?

  9. #9
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    io l'ho provata e funziona, prova a mettere un mysql_error oppure a eseguirla direttamente sul DB e vediamo se da qualche errore
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217
    Grazie mille! Errore mio

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.