sql >> データベース >  >> RDS >> Mysql

投稿に画像アルバムを表示するにはどうすればよいですか? [PHPとMYSQLのみを使用]

    最初の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を使用して同じことを行いました。)




    1. このMySQLテーブルを単一のクエリ用にさらに最適化する方法

    2. Windows 10にMySQLをインストールするにはどうすればいいですか? –MySQLをインストールするためのワンストップソリューション

    3. 文字列リテラルが長すぎます-Oracle11gr2で長いxmlデータをclobデータ型に割り当てる方法

    4. RLIKEがMySQLでどのように機能するか