Mysql
 sql >> Database >  >> RDS >> Mysql

Come visualizzare gli album di immagini nei post? [utilizzando solo PHP e MySQL]

La tua prima query SQL va bene, ma per la seconda vuoi solo selezionare le immagini per il post corrente (riga) nel ciclo while esterno, quindi la seconda query SQL dovrebbe essere:

"SELECT img_file, img_title FROM images WHERE post_id = $row[id_post]"

Aggiornamento per mostrare solo img3 del post1:

<!DOCTYPE html>
<html>
<body>
<?php
$db = mysqli_connect("localhost", "root", "", "post_images");    

$result = mysqli_query($db, "SELECT * FROM posts");
while ($row = mysqli_fetch_array($result)) {
   echo "<div class=\"post_container\">";
     echo $row['post_title'];
     echo "<div class=\"image_container\">";

    if ($row['id_post'] == 1) {
        $resultx = mysqli_query($db, "SELECT img_file, img_title FROM images WHERE post_id = " .$row['id_post']. " AND img_title = 'img3'");
    } else {
        $resultx = mysqli_query($db, "SELECT img_file, img_title FROM images WHERE post_id = " .$row['id_post']);
    }

     if(mysqli_num_rows($resultx) > 0) {
     while ($rowx = mysqli_fetch_array($resultx)) {
        echo "<img src='../folder_image_uploads/".$rowx['img_file']."' >";
        echo $rowx['img_title'];
        }
     }
     echo "</div>";
   echo "</div>";
}
?>
</body
</html>

Ho inserito la seconda query SQL in un'istruzione if, che controlla se l'id del post corrente è uguale a 1. Se lo è, la query SQL seleziona solo la riga con "img3". (E se non lo è, esegue la precedente query SQL che seleziona tutte le righe.)

Ovviamente funziona solo se conosci l'id del post e il titolo dell'immagine che desideri visualizzare. Una soluzione più generica per visualizzare sempre solo la terza immagine del primo post sarebbe qualcosa del genere:

<!DOCTYPE html>
<html>
<body>
<?php
$db = mysqli_connect("localhost", "root", "", "post_images");    

$result = mysqli_query($db, "SELECT * FROM posts ORDER BY id_post");
$rows = mysqli_fetch_all($result,MYSQLI_ASSOC);
foreach ($rows as $key => $value)
   echo "<div class=\"post_container\">";
     echo $row['post_title'];
     echo "<div class=\"image_container\">";

    if ($key == 0) {
        $resultx = mysqli_query($db, "SELECT img_file, img_title FROM images WHERE post_id = " .$row['id_post']. " ORDER BY id_img LIMIT 1 OFFSET 2");
    } else {
        $resultx = mysqli_query($db, "SELECT img_file, img_title FROM images WHERE post_id = " .$row['id_post']);
    }

     if(mysqli_num_rows($resultx) > 0) {
     while ($rowx = mysqli_fetch_array($resultx)) {
        echo "<img src='../folder_image_uploads/".$rowx['img_file']."' >";
        echo $rowx['img_title'];
        }
     }
     echo "</div>";
   echo "</div>";
}
?>
</body
</html>

Qui ho memorizzato l'intero risultato della prima query SQL in un array, perché le chiavi dell'array corrispondono al numero di ogni post meno uno. Se $key =0, la riga corrente è il primo post e quindi utilizziamo la query SQL che seleziona solo la terza immagine dalla tabella delle immagini. Se $key non è 0 utilizziamo l'altra query SQL che seleziona tutte le immagini.

Nella nuova query SQL, LIMIT 1 significa selezionare solo 1 riga e OFFSET 2 significa iniziare con la riga 3 (il conteggio inizia da 0, quindi offset 2 restituisce la riga 3).

Ho aggiunto ORDER BY id_img per assicurarmi che le immagini vengano sempre restituite nello stesso ordine, l'ordine in cui sono state aggiunte al database. (E ho fatto lo stesso con id_post nella prima query.)