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

    [MYSQL] Query complessa

    Salve,
    devo richiamare una serie di dati da diverse tabelle e vorrei sapere se esiste un modo per richiamare i dati con una sola query invece che ricostruire un array eseguendo ogni volta una query per richiamare i singoli dati.

    Vi espongo la struttura del database

    Tabella 1
    id_tab1 (univoco, autoincrement)
    campo1 (stringa di testo)
    campo_id_tab2 (vari id suddivisi da una "," es. 1,2,3,4)
    campo_id_tab3 (vari id suddivisi da una "," es. 1,2,3,4)
    campo_id_tab4 (vari id suddivisi da una "," es. 1,2,3,4)

    Tabella 2
    id_tab2
    nome

    Tabella 3
    id_tab3
    nome

    Tabella 4
    id_tab4
    nome

    Vorrei ottenere che invece che gli id mi mostri i nomi es

    id_tab1 = 1
    campo1 = 'Testo'
    campo_id_tab2 = 'maurizio,giancarlo,filippo'
    campo_id_tab3 = 'maurizio,giancarlo,filippo'
    campo_id_tab4 = 'maurizio,giancarlo,filippo'

    È possibile ottenere il risultato desiderato mediante una sola query? Eventualmente è una soluzione che mi consigliate di adottare o è meglio ricavare i dati da ogni tabella e poi inserirli in un array?

    Grazie
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Temo che senza normalizzare le tabelle non sia fattibile.

  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Infatti devi mettere nelle tabelle le chiavi esterne per poter collegare una tupla di una tabella con quella di un'altra.

    Poi hai le select con sottoselect oppure le join.

    Esempio

    tabella utenti
    id
    nome
    cognome


    tabella dettagli utenti
    id
    id_utente
    paypal
    iban
    visa
    mastercard
    skype msn
    facebook
    indirizzo
    citta
    prov






    Carico l'utente con tutti i dettagli che mi servono

    select
    u.nome ,
    u.cognome ,
    du.*

    from utenti u

    left join dettagli utente du on du.id_utente = u.id

    where
    u.nome= "mario"

    Poi puoi impostare anche le chiavi esterne su my sql in modo che se elimi un utente ne elimini anche tutti i dettagli oppure lanci la funzione di backup che etc...

    Cmq in soldoni :

    1- normalizza il db
    2- usa select-sottoselect oppure join per caricare i dati da tabelle diverse

  4. #4
    Scusate la mia ignoranza, per normalizzare il database intendete che devo eliminare la stringa di indici e di creare, per esempio, una seconda tabella contenente le relazioni tra i vari indici?

    Purtroppo conosco poco i database, però sto cercando di implementare le mie conoscenze al quanto limitate.

    Grazie
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.