Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wyświetlać albumy obrazów w postach? [przy użyciu tylko PHP i MYSQL]

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.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskiwanie połączenia PHP PDO z mysql_connect()?

  2. Kalendarz PHP z powtarzającymi się wydarzeniami z bazy danych MySQL

  3. Wstawianie danych blob w Javie za pomocą PreparedStatement

  4. Usuń lub przytnij pierwsze lub ostatnie kilka znaków w bazie danych MySQL za pomocą SQL

  5. Sprawdź, czy kolumna/klucz istnieje?