Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Query tra più tabelle correlate da diverse chiavi

    E' un po' incasinata come cosa, in pratica dato un ID, devo prelevarmi: CAP, Comune e Provincia.
    Il DB è strutturato in questo modo:

    http://imageshack.us/photo/my-images...titolo1fr.jpg/

    Per prima, partendo dall'ID, necessito di prelevare il cod_istat dalla tabella comuni
    Poi usare il cod_istati per prelevare il nome del comune e il cod_provincia dalla tabella Province
    Infine utilizzare il cod_provincia per prelevare il nome della provincia dalla tabella Regioni

    Quello che mi chiedo è tecnicamente possibile farlo con un'unica query oppure me ne tocca fare tre distinte? Per caso c'entra qualcosa il JOIN (col quale non ho ancora molta dimestichezza) ?

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    A sensazione mi sembra molto incasinata

    Nella immagine non vedo la citata tabella delle provincie

    pero vedo che le provincie sono elencate coi dettagli nella tabella delle regioni ?????


    prova a farci un elenco chiaro delle:
    - tabelle
    - relativi campi
    indicando le ChiaviPrimarie e le chiaviEsterne

    .

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    purtroppo non l'ho realizzato io ma ho trovato il set di tabelle su internet

    Allora, in tutte e tre le tabelle la chiave primaria è l'ID.. Ma devi considerare comunque che il codice istat è ovviamente univoco così come il nome della provincia (quindi anche se non sono selezionate come chiavi primarie, teoricamente possono esserlo)..

    La tabella province sarebbe la tabella regioni dell'immagine, ho sbagliato a scrivere e misà che mi con confuso pure nello spiegare le operazioni. Allora rettifico:

    1)Partendo dall'ID del cap, dalla tabella CAP mi devo prelevare il codice istat

    2) Col codice istat dalla tabella comuni mi devo prelevare il codice provincia e il comune (ad esempio Airasca)

    3) Col codice provincia dalla tabella Province mi devo prelevare il nome della Provincia (ad esempio Torino)


    Se non ho capito male l'uso del JOIN, dovrei joinare in tutto tre tabelle (che non ho capito se è tecnicamente fattibile). Il primo LEFT JOIN collega la tabella cap con quella dei comuni, prendendo come anello di congiunzione il codice istat. Il secondo LEFT JOIN collega la tabella comuni con quella province prendendo come anello di congiunzione il codice provincia


    Ecco l'immagine aggiornata
    http://imageshack.us/a/img823/5750/senzatitolo1uu.jpg


    Alla fine il mio obiettivo finale è quello di poter creare una stringa di questo tipo:

    80053 Castellammare (NA)

    il tutto con una singola query e fetchando il risulato

  4. #4
    SELECT cap.cod_istat, comuni.comune, regioni.sigla
    FROM (cap LEFT JOIN comuni ON cap.cod_istat = comuni.cod_istat) LEFT JOIN regioni ON comuni.cod_provincia = regioni.cod_provincia;

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    grazie funziona!
    Bisognava però aggiungere l'id del cap da cui partire, e ho fatto così (ditemi se è giusto)

    SELECT cap.cod_istat, comuni.comune, province.sigla FROM ((cap LEFT JOIN comuni ON cap.cod_istat = comuni.cod_istat) LEFT JOIN province ON comuni.cod_provincia = province.cod_provincia) WHERE cap.id='$idCap'

  6. #6
    Originariamente inviato da American
    grazie funziona!
    Bisognava però aggiungere l'id del cap da cui partire, e ho fatto così (ditemi se è giusto)

    SELECT cap.cod_istat, comuni.comune, province.sigla FROM ((cap LEFT JOIN comuni ON cap.cod_istat = comuni.cod_istat) LEFT JOIN province ON comuni.cod_provincia = province.cod_provincia) WHERE cap.id='$idCap'
    yes

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    ma c'è un limite di join innestabili?

  8. #8
    Teoricamente no. Il limite è imposto dal database che usi.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Scusate se torno all'argomento, ma mi trovo di fronte ad una situazione inedita..
    In pratica riprendendo l'esempio di sopra, consideriamo che debba fare una LEFT JOIN uno a molti, ad esempio, per prelevare tutti gli abitanti di una determinata città dalla tabella "abitanti":

    Codice PHP:
    SELECT città.*, abitanti.cognome FROM
     
    (citta LEFT JOIN abitanti WHERE citta.id=abitanti.idCitta
    Nel momento in cui vado ad effettuare l'associative fetch dei risultati, mi accorgo che, stampando a video il contenuto dell'array, ad ogni città è stato collegato un solo abitante (sebbene ovviamente nel DB ce ne sia più di uno)...
    Ora dovrei capire: è la query ad essere sbagliata, oppure è la funzione associative fetch che nel creare le chiavi associative sovrascrive i risultati? L'array associativo infatti crea la chiave in base al nome della colonna. Se consideriamo che ci sono più valori associati alla parola "cognome", vien da se che si creano degli overwrite durante l'operazione di fetch..giusto?
    Si può risolvere?

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.