Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [SQL] ricerca su più tabelle

    Ho 5 tabelle così strutturate:

    TABELLA PROGETTI
    -------------------
    id|Titolo|Data|Luogo|

    TABELLA CLIENTI
    -------------------
    id|Nome|Cognome|Ruolo|

    TABELLA UTENTI
    -------------------
    id|Nome|Cognome|Ruolo|

    TABELLA PROGETTOCLIENTI
    ---------------------------
    id|IDProgetto|IDCliente

    TABELLA PROGETTOUTENTI
    ---------------------------
    id|IDProgetto|IDUtente



    In sostanza ogni progetto può avere più utenti e/o clienti, le tabelle ProgettoClienti e ProgettoUtenti servono appunto per legare i clienti/utenti al progetto.

    Ora data una parola voglio avere ID, il Titolo e la Data di tutti quei progetti la cui parola sia contenuta nei campi Titolo o Luogo della tabella Progetti oppure nei campi Nome, Cognome, Ruolo di Clienti e/o Utenti legati al progetto.

    Ho provato ad usare sia JOIN che JOIN LEFT ma ho is eguenti problemi:
    -se uso JOIN è sufficiente che al progetto non siano stati asssegnati utenti e/o clienti che la query non mi restituisce nulla.
    -se uso JOIN LEFT ottengo sempre i dati del progetto anche se non c'è alcuna corrispondenza con la mia ricerca.

    Quanche suggerimento?

    NOTA: uso SQLIte come DB.

    Grazie.

  2. #2
    devi usare la LEFT JOIN. posta la query incriminata, che le si da' un'occhiata, grazie

  3. #3
    Allora nel primo post avevo semplificato un pochino le cose (i nomi delle tabelle e dei campi).

    La SQL che ho usato è questa:

    codice:
    SELECT Projects.ID, Projects.Title, Projects.RecordCreated, Projects.RecordModified FROM Projects LEFT OUTER JOIN ProjectsUsers ON Projects.ID = ProjectsUsers.IDProject LEFT OUTER JOIN Users ON ProjectsUsers.IDUser = Users.ID , Contacts LEFT OUTER JOIN ProjectsCustomers ON Projects.ID = ProjectsCustomers.IDProject AND ProjectsCustomers.IDCustomer = Contacts.ID WHERE (Projects.Title LIKE "%aaa%" OR Projects.Kind LIKE "%aaa%" OR Projects.Files LIKE "%aaa%" OR Contacts.FullName LIKE "%aaa%" OR Users.FullName LIKE "%aaa%" OR Projects.Title LIKE "%aaa%" OR Projects.DateFrom LIKE "%aaa%" OR Projects.DateTo)
    Nella query la "aaa" è il mio criterio di ricerca.

    Il problema che ho riscontrato per per appunto il fatto che ottengo sempre le informazioni di tutti i progetti anche quando non c'è rispetto del criterio.

    Spero possiate aiutarmi. Grazie in anticipo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    cominciamo col dire che è una ricerca computazionalmente inefficiente (molto inefficiente), e che le parentesi sono state inventate proprio per i problemi di priorità degli operatori.

    ci sono una serie di aspetti poco chiari
    1) perchè left outer join?

  5. #5
    Non creo query di lavoro, mi sono trovato a doverne creare uno e ho cercato informazioni in internet, qui ho trovato LEFT OUTER JOIN ed ho provato ad usarla. Detto questo se c'è un sistema migliore ditemelo.

    Grazie.

  6. #6

  7. #7
    Ho gia provato ad usare LEFT JOIN invece di LEFT OUTER JOIN ma ho lo stesso problema: ottengo tutti i progetti della tabella anche se non c'è corrispondenza con il mio criterio di ricerca. Qualche altro suggerimento?

  8. #8
    Nessuno che sappia darmi un consiglio per risolvere la cosa? Se la mia query è sbagliata alla base non ho problemi a prendere in considerazione altre strade.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    crea una copia del tuo database, purgata ovviamente dei dati sensibili, caricala su uno spazio-web e metti il link

  10. #10
    riposta la query (per piacere, mettila su più righe, grazie)

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.