• User

    JOIN Query MySQL

    Buona sera a tutti GTiani,
    mi rivolgo a voi perchè nonostante le innumerevoli spiegazioni trovate non sono arrivato ad un risultato funzionante❌x:x

    Ciò di cui ho bisogno è di costruire una query per la sezione "Blog" del mio sito web che mi consenta di estrarre informazioni da più tabelle (senza effettuare, quindi, più query).
    Credo che il metodo più efficiente siano le JOIN QUERY, tuttavia non riesco ad effettuarle.
    [CENTER]LE TABELLE

    CATEGORIE[/CENTER]
    [TABLE="class: grid, width: 500, align: center"]

    [TD]cat_id[/TD]
    [TD]cat_title[/TD]
    [TD]cat_desc[/TD]
    [/TR]

    [TD]ID della categoria[/TD]
    [TD]Il mio titolo[/TD]
    [TD]La mia descrizione[/TD]
    [/TR]
    [/TABLE]
    [CENTER]**
    POST**[/CENTER]
    [TABLE="class: grid, width: 500, align: center"]

    [TD]post_id[/TD]
    [TD]post_title[/TD]
    [TD]post_text[/TD]
    [TD]post_aut[/TD]
    [TD]post_cat[/TD]
    [/TR]

    [TD]ID del post[/TD]
    [TD]Il mio titolo[/TD]
    [TD]Il contenuto del post[/TD]
    [TD]ID dell'autore[/TD]
    [TD]ID della categoria[/TD]
    [/TR]
    [/TABLE]
    [CENTER]
    AUTORI[/CENTER]
    [TABLE="class: grid, width: 500, align: center"]

    [TD]aut_id[/TD]
    [TD]aut_first_name[/TD]
    [TD]aut_last_name[/TD]
    [TD]aut_email[/TD]
    [/TR]

    [TD]ID dell'autore[/TD]
    [TD]Nome autore[/TD]
    [TD]Cognome autore[/TD]
    [TD]Email dell'autore[/TD]
    [/TR]
    [/TABLE]

    Quello che ho bisogno è di ottenere tutti questi dati in una sola query cosi da poterli mostrare nella schermata di riepilogo dei post con il classico [PHP]
    // Inizializzo la variabile
    $lista_post = '';

    // Estraggo i dati dalla query e genero l'HTML
    while($row = mysqli_fetch_array($result)) {
    $lista_post .= '<li>Titolo: '.$row["post_title"].', Autore: '.$row["aut_first_name"].', Categoria di riferimento: '.$row["post_cat"].'</li>';
    }

    // Mostro l'HTML generato
    echo $list_post;

    [/PHP]

    Qualcuno può aiutarmi? Grazie mille!
    Un saluto:ciauz:,
    Francesco


  • Moderatore

    Ciao Francesco,
    prova così o qualcosa di simile (scusa ma non posso testare il codice adesso, quindi vado ad occhio):

    SELECT * FROM POST 
    JOIN CATEGORIE ON POST.post_cat = CATEGORIE.cat_id
    JOIN AUTORI ON POST.post_aut = AUTORI.aut_id
    

    Fammi sapere.
    Saluti


  • User

    Ciao Shad!
    Grazie mille della risposta! Ho utilizzato la tua formulazione ed ha funzionato alla perfezione. Di seguito (lo scrivo per eventuali altri interessati) il codice che ho utilizzato:

    [PHP]
    //connect:
    $link = mysqli_connect($host, $user, $password, $db) or die("Errore di connessione al database: <br>" . mysqli_error($link));

    //consultation:
    $query = "
    SELECT *
    FROM POST
    JOIN CATEGORIE
    ON POST.ID_CATEGORIA= CATEGORIE.ID_CATEGORIA
    JOIN AUTORI
    ON POST.ID_AUTORE= AUTORI.ID_AUTORE
    ORDER BY POST.DATA_CREAZIONE DESC"
    or die("Errore nella query: <br>" . mysqli_error($link));

    //execute the query.
    $result = $link->query($query) or die("Errore nell'esequzione della query: <br>" . mysqli_error($link)); ;

    // create empty var
    $lista_post = '';

    // fill created var with HTML
    while($row = mysqli_fetch_array($result)) {
    $lista_post .= '<li>Titolo: '.$row["post_title"].', Autore: '.$row["aut_first_name"].', Categoria di riferimento: '.$row["post_cat"].'</li>';
    }

    // display HTML
    echo $lista_post;

    [/PHP]