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

    [sqlite] aiuto per query complessa

    Trovo difficoltà a scrivere una query che vede coinvolte 4 tabelle.
    La situazione è questa, ho 4 tabelle: progetti, contatti, utenti e compiti.

    TABELLA PROGETTI
    id|id_contatti|id_utenti|id_compiti|...

    TABELLA CONTATTI
    id|...

    TABELLA UTENTI
    id|...

    TABELLA COMPITI
    id|id_contatti|id_utenti|...

    In parole povere ai progetti sono associati 1 o più contatti, 1 o più utenti e 1 o più compiti. Al singolo compito è associato un solo utente (uno di quelli associati al progetto di cui il compito fa parte).

    Con un query dovrei estrarre dal database l'elenco di tutti i progetti con relativi contatti, utenti e compiti e de anche l'utente.

    A dire il vero non ho idea se la cosa sia possibile.

    Nelle peggiori delle ipotesi potrebbe anche bastarmi una query come quella sopra descritta a meno dell'utente associato al singolo compito.

    Spero mi possiate aiutare, grazie in anticipo.

  2. #2
    mettile in JOIN, tipo

    SELECT colonne FROM tabella1 JOIN tabella2 ON tabella1.colonna=tabella2.colonna_in_comune
    JOIN tabella3 ON tabella2.colonna=tabella3.colonna_in_comune
    JOIN ...

  3. #3
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da array81 Visualizza il messaggio
    ..... In parole povere ai progetti sono associati 1 o più contatti, 1 o più utenti e 1 o più compiti. ......
    Pero a me viene un dubbio .....
    Immaginiamo che un progetto abbia 3 contatti
    -- Avresti 3 record con lo stesso progetto ?????

    .

  4. #4
    in effetti il db pare male organizzato...

  5. #5
    Quote Originariamente inviata da nman Visualizza il messaggio
    Pero a me viene un dubbio .....
    Immaginiamo che un progetto abbia 3 contatti
    -- Avresti 3 record con lo stesso progetto ?????

    .
    Molto probabilmente si. Accetto a tal riguardo suggerimenti. Non mastico database tutti i giorni e questa è stata la prima cosa che mi è venuta in mente.

  6. #6
    prendiamo in considerazione solo la partecipazione degli utenti ai progetti

    Progetti
    ------------
    id_progetto
    descrizione
    ....

    Utenti
    --------
    id_utente
    Nome
    Cognome
    .....

    ProgettiUtenti
    ----------------
    id_ProgettiUtenti
    id_progetto
    id_utente
    .... (eventuali, non obbligatorie, colonne aggiuntive)



    lo stesso vale per gli altri abbinamenti

  7. #7
    Quote Originariamente inviata da optime Visualizza il messaggio
    prendiamo in considerazione solo la partecipazione degli utenti ai progetti

    Progetti
    ------------
    id_progetto
    descrizione
    ....

    Utenti
    --------
    id_utente
    Nome
    Cognome
    .....

    ProgettiUtenti
    ----------------
    id_ProgettiUtenti
    id_progetto
    id_utente
    .... (eventuali, non obbligatorie, colonne aggiuntive)



    lo stesso vale per gli altri abbinamenti
    OK, rileggendo il mio post iniziale mi sono accorto di aver saltato un passaggio importantissimo.
    Effettivamente esistono altre 3 tabelle che fungono a legame tra i progetti e il resto così come da te indicato, non ho capito come ho fatto a dimenticarmene.
    Ricapitolando la situazione è questa:

    TABELLA PROGETTI
    id|...

    TABELLA PROGETTOCONTATTI
    id|id_progetto|id_contatti|...

    TABELLA CONTATTI
    id|...

    TABELLA PROGETTOUTENTI
    id|id_progetto|id_utenti|...

    TABELLA UTENTI
    id|...

    TABELLA PROGETTOCOMPITI
    id|id_progetto|id_compiti|...

    TABELLA COMPITI
    id|...

    TABELLA COMPITOUTENTI
    id|id_compito|id_utenti|...

    Questa dovrebbe essere la reale semplificazione del mio database, mi scuso ancora di aver sbagliato il post iniziale.

  8. #8
    ok, rimane valida la soluzione tramite JOIN, solo che coinvolge più tabelle

    SELECT colonne
    FROM
    PROGETTOCONTATTI TPC JOIN PROGETTI TP ON TPC.id_progetto=TP.ID
    JOIN CONTATTI TC ON TPC.
    id_contatti=TC.ID
    ...

  9. #9
    Attualmente utilizzo la soluzione con il JOIN il problema è che mi vengono estratti tutti i dati, ad esempio se un progetto non ha associato un'attività non viene estratto dalla query.
    C'è un modo per far si che siano estratti tutti i progetti indipendentemente se questi hanno associati dei contatti, degli utenti o delle attività?

  10. #10
    progetti left join progetticontatti join contatti

Tag per questa discussione

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.