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

Hvordan viser man billedalbum i indlæg? [bruger kun PHP og MYSQL]

Din første SQL-forespørgsel er fin, men for den anden vil du kun vælge billederne for det aktuelle indlæg (rækken) i den ydre while-løkke, så den anden SQL-forespørgsel skal være:

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

Opdatering til kun at vise img3 af 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>

Jeg har placeret den anden SQL-forespørgsel i en if-sætning, som tjekker om id'et for det aktuelle indlæg er lig med 1. Hvis det er det, så vælger SQL-forespørgslen kun rækken med "img3" i. (Og hvis det ikke er det, udfører den den forrige SQL-forespørgsel, som vælger alle rækkerne.)

Dette virker selvfølgelig kun, hvis du kender id'et på indlægget og titlen på det billede, du vil vise. En mere generisk løsning til altid kun at vise det tredje billede af det første indlæg ville være sådan her:

<!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>

Her har jeg gemt hele resultatet af den første SQL-forespørgsel i et array, for så svarer arrayets nøgler til nummeret på hver post minus én. Hvis $key =0, er den aktuelle række det første indlæg, og så bruger vi SQL-forespørgslen, der kun vælger det tredje billede fra billedtabellen. Hvis $key ikke er 0, bruger vi den anden SQL-forespørgsel, der vælger alle billederne.

I den nye SQL-forespørgsel betyder LIMIT 1 kun at vælge 1 række, og OFFSET 2 betyder start med række 3 (optælling starter ved 0, så offset 2 returnerer række 3).

Jeg har tilføjet ORDER BY id_img for at sikre, at billeder altid returneres i samme rækkefølge, den rækkefølge, som de blev tilføjet til databasen. (Og jeg har gjort det samme med id_post i den første forespørgsel.)




  1. Hvordan man trækker 2 datoer fra i orakel for at få resultatet i time og minut

  2. Ugyldig parametertype (numpy.int64) ved indsættelse af rækker med executemany()

  3. Erstat en streng med en anden streng i SQL Server (T-SQL)

  4. MySQL SELECT sidste par dage?