Първата ви SQL заявка е наред, но за втората искате само да изберете изображенията за текущата публикация (ред) във външния while цикъл, така че втората SQL заявка трябва да бъде:
"SELECT img_file, img_title FROM images WHERE post_id = $row[id_post]"
Актуализация за показване само на img3 от пост1:
<!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>
Поставих втората SQL заявка в if оператор, който проверява дали идентификаторът на текущата публикация е равен на 1. Ако е, тогава SQL заявката избира само реда с "img3" в него. (И ако не е, изпълнява предишната SQL заявка, която избира всички редове.)
Разбира се, това работи само ако знаете идентификатора на публикацията и заглавието на изображението, което искате да покажете. По-общо решение за винаги показване само на третото изображение от първата публикация би било нещо подобно:
<!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>
Тук съм съхранил целия резултат от първата SQL заявка в масив, защото тогава ключовете на масива съответстват на номера на всяка публикация минус един. Ако $key =0, текущият ред е първата публикация и след това използваме SQL заявката, която избира само третото изображение от таблицата с изображения. Ако $key не е 0, ние използваме другата SQL заявка, която избира всички изображения.
В новата SQL заявка LIMIT 1 означава избор само на 1 ред, а OFFSET 2 означава започване с ред 3 (броенето започва от 0, така че отместването 2 връща ред 3).
Добавих ORDER BY id_img, за да се уверя, че изображенията винаги се връщат в същия ред, в реда, в който са добавени към базата данни. (И аз направих същото с id_post в първата заявка.)