Navigazione

    Privacy - Termini e condizioni
    © 2020 Search On Media Group S.r.l.
    • Registrati
    • Accedi
    • CATEGORIES
    • Discussioni
    • Non letti
    • Recenti
    • Hashtags
    • Popolare
    • Utenti
    • Stream
    • Interest
    • Categories
    1. Home
    2. Categorie
    3. Coding e Sistemistica
    4. Coding
    5. [MySql] Join un po particolare tra 3 tabelle
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • F
      fehu User • ultima modifica di

      [MySql] Join un po particolare tra 3 tabelle

      Salve
      mi trovo in una situazione un po difficile con una query

      Ho 3 tabelle, una rappresentante l'elenco delle province italiane, una i comuni, ed una un elenco di locali, tutti messi in relazione tra di loro
      Descrivo le tabelle, credo che sia abbastanza autoesplicativo, le tabelle sono in relazione uno a molti tramite l'id, i comuni con le province, i locali con i comuni, in modo che si possa traversare il database e sapere in che provincia si trova un determinato locale

      Province

      • Id_provincia
      • Nome_provincia

      Comuni

      • Id_comune
      • Id_provincia

      Locali

      • Id_locale
      • Id_comune

      Ho bisogno di sapere quali sono le provincie senza nessun locale
      Inizialmente avevo provato a fare una left join tra comuni e locali dove la relazione era nulla, e mi dava risultati corretti ma mancava la provincia
      Ho aggiunto la inner join tra province e comuni, ma mi ripeteva le province centinaia di volte, ho provato ad aggiungere un Distinct(Id_provincia), ma mi da zero records come risultato
      Ho provato varie combinazioni e soluzioni, ma nessuna funziona, voi come fareste?

      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
      • A
        andrearufo User Attivo • ultima modifica di

        Io userei la funzione mysql_affected_rows per contare le righe di una chiamata: anche annidando due cicli la cosa mi pare molto veloce!

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • F
          fehu User • ultima modifica di

          Il mio problema è che se non uso il distinct me ne restituisce migliaia perchè conta le righe dei comuni, se uso il distinct sull'id delle province mi restituisce un recordset vuoto

          non avevo pensato ad utilizzare quella funzione, ma penso che il problema rimanga lo stesso di adesso che uso un count()

          non lo so, sarà inesperienza o uno di quei casi limite in cui mysql ricompila la query e fa pasticci

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • A
            andrearufo User Attivo • ultima modifica di

            Mh... Con mysql_affected_rows puoi semplicemente fare un if se uguale a 0 allora stampa il nome!

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • F
              fehu User • ultima modifica di

              ah chiedo scusa pensavo fosse una funzione di mysql, masochisticamente sto utilizzando asp

              non c'è un modo per filtrare i risultati solo tramite query?

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • A
                andrearufo User Attivo • ultima modifica di

                Mh... sinceramente non saprei: stai provando a "buttare" le query direttamente in phpMyAdmin per vedere cosa ti rende?

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • F
                  fehu User • ultima modifica di

                  Posso copiare la query che uso (con i nomi di tabella e campi un po diversi)

                  SELECT COUNT(  DISTINCT (mappa_province.ID_provincia
                  ) ) 
                  FROM mappa_province
                  INNER  JOIN mappa_comuni ON mappa_comuni.ID_provincia = mappa_province.ID_provincia
                  LEFT  JOIN locali ON mappa_comuni.ID_comune = locali.ID_comune
                  WHERE locali.ID_comune IS  NULL 
                  

                  avevo scritto male prima, questa query con il count mi da 103 (il totale delle province), senza mi da l'elenco di tutte e 103 le province

                  probabilmente sbaglio qualcosa alla base della query

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • F
                    fehu User • ultima modifica di

                    mi sono accorto adesso quanto sono stordito
                    ho l'id della provincia riportato nella tabella del comune, basta fare una join a due

                    SELECT  DISTINCT (mappa_comuni.ID_provincia
                    ), locali.id_comune
                    FROM mappa_comuni
                    LEFT  JOIN locali ON mappa_comuni.ID_comune = locali.ID_comune
                    WHERE locali.ID_comune IS  NULL
                    

                    ma mi restituisce anche questo tutte le province :S

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • Z
                      ziobudda Super User • ultima modifica di

                      Scusa prova a selezionare in una query (A) i comuni che hanno dei locali e poi tramite un NOT IN () trovi i comuni che non hanno locali. Per intenderci (andando un po' alla ceca):

                      SELECT * from provincie p
                      LEFT JOIN comuni c on c.id_comune = p.id_comune and c.id_comune NOT IN (SELECT DISTINCT id_comune from locali)

                      M.

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • F
                        fehu User • ultima modifica di

                        Ho provato questa ma mi restituisce sempre tutte le province :S

                        SELECT DISTINCT(ID_provincia) 
                        FROM mappa_comuni c  
                        WHERE c.id_comune NOT IN (SELECT DISTINCT id_comune from locali)
                        
                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • Z
                          ziobudda Super User • ultima modifica di

                          Non è che hai dei comuni senza locali in tutte e 5 le provincie ?

                          M.

                          0 Miglior Risposta Ringrazia Cita Rispondi

                            1 Risposta Ultima Risposta
                          • F
                            fehu User • ultima modifica di

                            ah... mi sento un idiota 😢

                            si, ovviamente le province che contengono comuni con locali registrati contengono anche comuni senza locali, quindi per questo me li restituisce sempre tutti
                            ma allora che devo fare? :mmm:

                            0 Miglior Risposta Ringrazia Cita Rispondi

                              1 Risposta Ultima Risposta
                            • Z
                              ziobudda Super User • ultima modifica di

                              ehmm... capire per bene cosa devi fare....

                              M.

                              0 Miglior Risposta Ringrazia Cita Rispondi

                                1 Risposta Ultima Risposta
                              Caricamento altri post
                              Rispondi
                              • Topic risposta
                              Effettua l'accesso per rispondere
                              • Da Vecchi a Nuovi
                              • Da Nuovi a Vecchi
                              • Più Voti