最初のSQLクエリは問題ありませんが、2番目のクエリでは、外側のwhileループで現在の投稿(行)の画像のみを選択する必要があるため、2番目のSQLクエリは次のようになります。
"SELECT img_file, img_title FROM images WHERE post_id = $row[id_post]"
post1のimg3のみを表示するための更新:
<!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>
2番目のSQLクエリをifステートメントに配置しました。これは、現在の投稿のIDが1に等しいかどうかをチェックします。等しい場合、SQLクエリは「img3」を含む行のみを選択します。 (そうでない場合は、すべての行を選択する前のSQLクエリを実行します。)
もちろん、これは、投稿のIDと表示する画像のタイトルがわかっている場合にのみ機能します。最初の投稿の3番目の画像のみを常に表示するためのより一般的な解決策は、次のようになります。
<!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クエリの結果全体を配列に格納しました。これは、配列のキーが各投稿の数から1を引いた数に対応しているためです。 $ key =0の場合、現在の行が最初の投稿であり、画像テーブルから3番目の画像のみを選択するSQLクエリを使用します。 $ keyが0でない場合は、すべての画像を選択する他のSQLクエリを使用します。
新しいSQLクエリでは、LIMIT 1は1行のみを選択することを意味し、OFFSET 2は行3から開始することを意味します(カウントは0から始まるため、オフセット2は行3を返します)。
ORDER BY id_imgを追加して、画像が常に同じ順序で返されるようにしました。これは、画像がデータベースに追加された順序です。 (そして、最初のクエリでid_postを使用して同じことを行いました。)