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. Inner JOIN per due campi
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • S
      stable Super User • ultima modifica di

      Inner JOIN per due campi

      Ciao a tutti.
      Ho questo tipo di tabelle:

      categorie_guide

      id | nome

      sentenze

      id | titolo | oggetto | Arg_Prim | Arg_Sec

      Il problema è fare un Join per mettere in relazione sia Arg_Prim che Arg_Sec (che sarebbero gli argomenti della sentenza) con la tabella categoria_guide.

      Ho provato questo codice:

      [PHP]SELECT sentenze.*, categoria_guide.nome
      FROM sentenze
      JOIN categoria_guide
      ON categoria_guide.id = sentenze.Arg_Prim
      WHERE sentenze.id = '12'[/PHP]

      E naturalmente funziona perchè stampa a video il nome della categoria (la Arg_Prim) della sentenza. Ma per sapere della seconda, come dovrei fare?

      Attendo lumi :mmm:

      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
      • S
        stable Super User • ultima modifica di

        Mi sono spiegato male nel mio post?

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • C
          cyrus User • ultima modifica di

          Ciao, come fai a stampare a video Arg_Prim?

          Allo stesso modo dovresti stampare Arg_Sec.

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • S
            stable Super User • ultima modifica di

            Il problema è che in base alle mie modeste conoscenze in materia non riesco a far stampare a video il campo Arg_Sec.

            Saresti così gentile da aiutarmi?

            Grazie 🙂

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • C
              cyrus User • ultima modifica di

              Mi fai vedere che codice usi per stampare a video Arg_Prim?

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • S
                stable Super User • ultima modifica di

                Questo è il codice:

                [php]
                //Prelevo i dati
                $query="SELECT sentenze.*, categoria_guide.nome AS cont FROM sentenze JOIN categoria_guide ON sentenze.Arg_Prim = categoria_guide.id";
                $res = mysql_query($query);

                if ($res && mysql_num_rows($res) > 0){
                //se entro in questo if vuol dire che la query ha prodotto dei risultati.
                //chiudo il php e inserisco del codice html
                ?>

                <table border="1">
                <tr>
                <td>Campo 1</td>
                <td>Campo 2</td>
                <td>Campo 3</td>
                <td>Campo 4</td>
                <td>Campo 5</td>
                </tr>

                <?php
                //ho apreto il tag della tabella e inserito una riga di intestazione con i nomi dei campi.
                while($row=mysql_fetch_assoc($res)){
                //per ogni "ciclata" del while produciamo una riga della tabella
                ?>

                 <tr>
                 <td><?php echo $row['id']?></td>
                 <td><?php echo $row['titolo']?></td>
                 <td><?php echo $row['oggetto']?></td>
                 <td><?php echo $row['cont']?></td>
                     <td><?php echo $row['cont']?></td>
                 </tr>
                

                <?php
                } //chiusura while
                ?>
                </table>
                <?php
                } // chiusura if
                ?>
                [/php]

                Sapresti aiutarmi?

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • C
                  cyrus User • ultima modifica di

                  Nel tuo codice stampi la stessa informazione sia per il campo 4 che per il 5.

                  Modificalo come segue:
                  [PHP]
                  <tr>
                  <td><?php echo $row['id']?></td>
                  <td><?php echo $row['titolo']?></td>
                  <td><?php echo $row['oggetto']?></td>
                  <td><?php echo $row['Arg_Prim']?></td>
                  <td><?php echo $row['Arg_Sec']?></td>
                  </tr>
                  [/PHP]

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • S
                    stable Super User • ultima modifica di

                    Ciao Cyrus,
                    il problema è che Arg_Prim e Arg_Sec sono numeri e li dovrei mettere in relazione con la tabella 'categorie_guide' che ho postato nel primo post.

                    Ecco come sarebbe:

                    categorie_guide


                    id | nome
                    1 | Asilo
                    2 | Cittadinanza
                    3 | Flussi

                    sentenze


                    id | titolo | oggetto | Arg_Prim | Arg_Sec

                    1233 | Sentenza n. | oggetto | 1 | 2
                    1234 |Sentenza n. | oggetto | 2 | 4

                    Aiuto please 🙂

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • C
                      cyrus User • ultima modifica di

                      Capito.
                      Non so se è la soluzione più pulita, ma appoggiarti ad una variabile tutte le corrispondenze della categorie_guide, quindi

                      [PHP]
                      $query1="SELECT *FROM categoria_guide";
                      $res1 = mysql_query($query1);
                      [/PHP]

                      Dopodichè, durante la stampa della tabella vai a cercare il nome

                      [PHP] <tr>
                      <td><?php echo $row['id']?></td>
                      <td><?php echo $row['titolo']?></td>
                      <td><?php echo $row['oggetto']?></td>
                      <td><?php echo $row['cont']?></td>
                      <td><?php while($row1=mysql_fetch_assoc($res1)){
                      if $row['Arg_Sec']==$row1['id'] echo $row1['nome'] }?></td>
                      </tr>
                      [/PHP]

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • S
                        stable Super User • ultima modifica di

                        No infatti non è proprio pulita, infatti una cosa del genere la avevo sperimentata in un progetto precedente ma non è una cosa fatta bene.

                        Grazie dell'aiuto.

                        Qualcun'altro mi potrebbe aiutare?

                        Grazie :mmm:

                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • T
                          thedarkita ModSenior • ultima modifica di

                          Ciao stable,
                          non sono sicuro di aver capito bene cosa vuoi fare, se quello che vuoi fare è unire 2 volte la stessa tabella utilizzando un campo differente dovresti fare cosi:

                          
                          SELECT sentenze.*, categoria_guide.nome, categoria_guide_sec.nome AS nome_sec
                          FROM sentenze 
                          JOIN categoria_guide ON categoria_guide.id = sentenze.Arg_Prim
                          JOIN categoria_guide AS categoria_guide_sec ON categoria_guide_sec.id = sentenze.Arg_Sec
                          
                          WHERE sentenze.id = '12'  
                          
                          
                          0 Miglior Risposta Ringrazia Cita Rispondi

                            1 Risposta Ultima Risposta
                          • S
                            stable Super User • ultima modifica di

                            L'idea è proprio quella di unire due tabelle e due campi all'interno di queste tabelle, Thedarkita ho provato quello che mi hai postato, ma purtroppo non funziona e non capisco il perchè...

                            0 Miglior Risposta Ringrazia Cita Rispondi

                              1 Risposta Ultima Risposta
                            • T
                              thedarkita ModSenior • ultima modifica di

                              Dovrebbe funzionare, lanciando la query da phpMyAdmin restituisce qualche errore o si vede correttamente il risultato che ti aspettavi?

                              0 Miglior Risposta Ringrazia Cita Rispondi

                                1 Risposta Ultima Risposta
                              • S
                                stable Super User • ultima modifica di

                                restituisce vuoto

                                0 Miglior Risposta Ringrazia Cita Rispondi

                                  1 Risposta Ultima Risposta
                                • P
                                  problemapc User Attivo • ultima modifica di

                                  Il problema è che per fare un join di una tabella 2 volte con un altra devi usare la tecnica degli alias:

                                  select
                                  a.id, b.nome as PrimaSentenza,
                                  a.titolo, c.nome as SecondaSentenza
                                  from sentenze a
                                  left join categorie_guide b on a.Arg_Prim = b.id
                                  left join categorie_guide c on a.Arg_Sec = c.id
                                  where a.id = 12

                                  0 Miglior Risposta Ringrazia Cita Rispondi

                                    1 Risposta Ultima Risposta
                                  • T
                                    thedarkita ModSenior • ultima modifica di

                                    Ho appena creato in locale le 2 tabelle che hai detto, con quei dati, lanciando la query che ti ho dato io e inserendo un where corretto come la sentenza 1233 del tuo esempio mi sembra funzioni perfettamente.
                                    Forse hai provato a mettere una sentenza non presente?

                                    0 Miglior Risposta Ringrazia Cita Rispondi

                                      1 Risposta Ultima Risposta
                                    • S
                                      stable Super User • ultima modifica di

                                      ProblemiPC, in effetti con due alias il problema è stato risolto.

                                      Per correttezza posto la query nel caso dovesse servire a qualcuno:

                                      SELECT a.id, b.nome AS PrimaSentenza, a.titolo, c.nome AS SecondaSentenza
                                      FROM sentenze a
                                      LEFT JOIN categoria_guide b ON a.Arg_Prim = b.id
                                      LEFT JOIN categoria_guide c ON a.Arg_Sec = c.id
                                      WHERE a.id =1248
                                      LIMIT 0 , 30
                                      P.S. Grazie anche agli altri che mi hanno aiutato

                                      0 Miglior Risposta Ringrazia Cita Rispondi

                                        1 Risposta Ultima Risposta
                                      • S
                                        stable Super User • ultima modifica di

                                        E se io volessi fare l'elenco delle sentenze indicando accanto per ciascun id la loro categoria di appartenza?

                                        Una cosa del genere

                                        
                                        id                    Arg_Prim                 Arg_Sec
                                        1                     bla                                   bla
                                        2                     .....                                bla
                                        3                      .......                            bla
                                        
                                        0 Miglior Risposta Ringrazia Cita Rispondi

                                          1 Risposta Ultima Risposta
                                        • S
                                          stable Super User • ultima modifica di

                                          up please.
                                          Credo sia una cosa che potrebbe interessare vari utenti...

                                          Grazie

                                          0 Miglior Risposta Ringrazia Cita Rispondi

                                            1 Risposta Ultima Risposta
                                          • T
                                            thedarkita ModSenior • ultima modifica di

                                            Non hai già tutti e 3 i valori restituiti dalla query? Non è sufficiente mandarli in output con php per formare la tabella che hai indicato?

                                            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