Twoje pierwsze zapytanie SQL jest w porządku, ale w przypadku drugiego chcesz tylko wybrać obrazy dla bieżącego wpisu (wiersza) w zewnętrznej pętli while, więc drugie zapytanie SQL powinno wyglądać następująco:
"SELECT img_file, img_title FROM images WHERE post_id = $row[id_post]"
Aktualizacja umożliwiająca wyświetlanie tylko img3 wpisu 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>
Drugie zapytanie SQL umieściłem w instrukcji if, która sprawdza, czy identyfikator bieżącego posta jest równy 1. Jeśli tak, zapytanie SQL wybiera tylko wiersz z „img3”. (A jeśli tak nie jest, wykonuje poprzednie zapytanie SQL, które zaznacza wszystkie wiersze.)
Oczywiście działa to tylko wtedy, gdy znasz identyfikator posta i tytuł obrazu, który chcesz wyświetlić. Bardziej ogólne rozwiązanie polegające na wyświetlaniu tylko trzeciego obrazu pierwszego posta byłoby mniej więcej takie:
<!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>
Tutaj zapisałem cały wynik pierwszego zapytania SQL w tablicy, ponieważ wtedy klucze tablicy odpowiadają numerowi każdego posta minus jeden. Jeśli $key =0, bieżący wiersz jest pierwszym postem, a następnie używamy zapytania SQL, które wybiera tylko trzeci obraz z tabeli images. Jeśli $key nie jest równe 0, używamy innego zapytania SQL, które wybiera wszystkie obrazy.
W nowym zapytaniu SQL LIMIT 1 oznacza wybór tylko 1 wiersza, a PRZESUNIĘCIE 2 oznacza rozpoczęcie od wiersza 3 (liczenie zaczyna się od 0, więc przesunięcie 2 zwraca wiersz 3).
Dodałem ORDER BY id_img, aby upewnić się, że obrazy są zawsze zwracane w tej samej kolejności, w jakiej zostały dodane do bazy danych. (Zrobiłem to samo z id_post w pierwszym zapytaniu.)