Visualizzazione dei risultati da 1 a 3 su 3

Discussione: correlazioni tabelle

  1. #1

    correlazioni tabelle

    salve.. per alleggerire una tabella l'ho spaccata in varie tabelle.. tutte queste nuove tabelle hanno 2 righe in comune, "id" e "nickname"....


    come posso far lavorare insieme 2 tabelle, prendendo 1 dato da una e 1 da un'altra, per esempio creando un order by #voce1 (sulla tabella 1) e by #voce2 (sulla tabella 2) ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2000
    Messaggi
    194
    Facciamo un esempio semplice. Hai 2 tabelle: utenti e indirizzi

    Nella tabella "utenti" hai:
    id_utente (autoincrement)
    nome

    Mentre nella tabella "indirizzi" avrai:
    id_indirizzo
    id_utente
    via

    Adesso hai un riferimento univoco nella tabella indirizzi che riporta l'id_utente.

    I dati contenuti in "utenti" quindi saranno i seguenti:
    id_utente = 1
    nome = pippo

    nella tabella "indirizzi" invece avrai:
    id_indirizzo = 1
    id_utente = 1 (lo stesso valore della tabella utenti)
    via = via roma 5

    Se adesso devi usare le 2 tabelle insieme per fare una select scriverai

    SELECT * FROM utenti,indirizzi WHERE utenti.id_utente=indirizzi.id_utente;

    se esegui la seguente select avrai come risultato:

    id_utente, nome, id_indirizzo, via

    e cioè

    1,pippo,1,via roma 5

    praticamente nella selct con "utenti.id_utente=indirizzi.id_utente" dico che l'id_utente contenuto nella tabella utenti è = all'id_utente contenuto nella tabella indirizzi e le due tabelle risultano unite.

    Questo è solo l'inizio per unire le tabelle. Ti consiglio di partire da questo esempio e cercare guide sulle JOIN che è un metodo grazie al quale puoi unire + tabelle e sfruttarle come se fossero una sola.

    Per l'ordinamento che indicavi nel tuo post, ti faccio un ulteriore esempio:
    Se riprendiamo l'esempio di prima:

    SELECT * FROM utenti,indirizzi WHERE utenti.id_utente=indirizzi.id_utente;

    ed inserisco un ordinamento

    SELECT * FROM utenti,indirizzi WHERE utenti.id_utente=indirizzi.id_utente ORDER BY via;

    tutti i record saranno ordinati per via ASCENDENTE (di default)

    ma se invece tu avessi messo ORDER BY id_utente, avresti come risultato un errore di mysql che ti dice che id_utente is ambiguos.
    Ciò sta a significare che mysql ti avverte che l'id_utente è presente in + tabelle e quindi ti chiede di specificare quale deve prendere.
    Per specificarlo basta che indichi la tabella:

    SELECT * FROM utenti,indirizzi WHERE utenti.id_utente=indirizzi.id_utente ORDER BY utenti.id_utente;

    Se desideri invece ordinare i risultati per 2 valori puoi inserire la seguente forma:

    SELECT * FROM utenti,indirizzi WHERE utenti.id_utente=indirizzi.id_utente ORDER BY utenti.id_utente, indirizzi.via;

    oppure

    SELECT * FROM utenti,indirizzi WHERE utenti.id_utente=indirizzi.id_utente ORDER BY utenti.id_utente ASC, indirizzi.via DESC;

    Spero di esserti stato utile per iniziare a comprendere il funzionamento.
    Ciao

  3. #3
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    ottima spiegazione direi!!

    potrebbe essere uno spunto per una bella pillolonza :master:
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

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.