sql >> Databáze >  >> RDS >> Mysql

Jak zobrazit obrázková alba v příspěvcích? [pouze pomocí PHP a MYSQL]

Váš první dotaz SQL je v pořádku, ale pro druhý chcete vybrat pouze obrázky pro aktuální příspěvek (řádek) ve vnější smyčce while, takže druhý dotaz SQL by měl být:

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

Aktualizace pro zobrazení pouze obrázku 3 z příspěvku 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>

Druhý dotaz SQL jsem umístil do příkazu if, který kontroluje, zda se id aktuálního příspěvku rovná 1. Pokud ano, dotaz SQL vybere pouze řádek s "img3". (A pokud tomu tak není, provede předchozí SQL dotaz, který vybere všechny řádky.)

Samozřejmě to funguje pouze v případě, že znáte ID příspěvku a název obrázku, který chcete zobrazit. Obecnější řešení pro vždy zobrazení pouze třetího obrázku prvního příspěvku by bylo něco takového:

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

Zde jsem uložil celý výsledek prvního SQL dotazu do pole, protože pak klíče pole odpovídají číslu každého příspěvku mínus jedna. Pokud $key =0, aktuální řádek je první příspěvek a poté použijeme SQL dotaz, který vybere pouze třetí obrázek z tabulky obrázků. Pokud $key není 0, použijeme druhý SQL dotaz, který vybere všechny obrázky.

V novém SQL dotazu LIMIT 1 znamená vybrat pouze 1 řádek a OFFSET 2 znamená začít od řádku 3 (počítání začíná od 0, takže offset 2 vrací řádek 3).

Přidal jsem ORDER BY id_img, abych zajistil, že obrázky budou vždy vráceny ve stejném pořadí, v pořadí, ve kterém byly přidány do databáze. (A totéž jsem udělal s id_post v prvním dotazu.)




  1. Potřebuji předat názvy sloupců pomocí proměnné v příkazu select v Store Procedure, ale nemohu použít dynamický dotaz

  2. Alternativy diagnostiky pgDash - Správa dotazů PostgreSQL s ClusterControl

  3. Rozdíl mezi databází a schématem

  4. Python, mysql.connector Chyba:Žádný výsledek nastaven na Fetch From; cgitb ukazuje správnou hodnotu předávanou funkci