Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để hiển thị album ảnh trong bài viết? [chỉ sử dụng PHP và MYSQL]

Truy vấn SQL đầu tiên của bạn là tốt, nhưng đối với truy vấn thứ hai, bạn chỉ muốn chọn hình ảnh cho bài đăng hiện tại (hàng) trong vòng lặp while bên ngoài, vì vậy truy vấn SQL thứ hai phải là:

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

Cập nhật để chỉ hiển thị img3 của post1:

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

Tôi đã đặt truy vấn SQL thứ hai trong câu lệnh if, câu lệnh này sẽ kiểm tra xem id của bài đăng hiện tại có bằng 1. Nếu đúng, thì truy vấn SQL chỉ chọn hàng có "img3" trong đó. (Và nếu không, nó thực hiện truy vấn SQL trước đó chọn tất cả các hàng.)

Tất nhiên điều này chỉ hoạt động nếu bạn biết id của bài đăng và tiêu đề của hình ảnh mà bạn muốn hiển thị. Một giải pháp chung chung hơn để luôn chỉ hiển thị hình ảnh thứ ba của bài đăng đầu tiên sẽ giống như sau:

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

Ở đây tôi đã lưu trữ toàn bộ kết quả của truy vấn SQL đầu tiên trong một mảng, bởi vì sau đó các khóa của mảng tương ứng với số lượng của mỗi bài đăng trừ đi một. Nếu $ key =0, hàng hiện tại là bài đăng đầu tiên và sau đó chúng tôi sử dụng truy vấn SQL chỉ chọn hình ảnh thứ ba từ bảng hình ảnh. Nếu $ key không phải là 0, chúng tôi sử dụng truy vấn SQL khác để chọn tất cả các hình ảnh.

Trong truy vấn SQL mới, LIMIT 1 có nghĩa là chỉ chọn 1 hàng và OFFSET 2 có nghĩa là bắt đầu với hàng 3 (đếm bắt đầu từ 0, do đó, offset 2 trả về hàng 3).

Tôi đã thêm ORDER BY id_img để đảm bảo các hình ảnh luôn được trả về theo cùng một thứ tự, thứ tự chúng được thêm vào cơ sở dữ liệu. (Và tôi đã làm tương tự với id_post trong truy vấn đầu tiên.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql_exceptions.OperationalError:(1045, Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:CÓ))

  2. Cơ sở dữ liệu quan hệ có thể mở rộng quy mô theo chiều ngang

  3. Chèn vào bảng MySQL hoặc cập nhật nếu tồn tại

  4. Cấu hình Tomcat sử dụng DBCP

  5. Kết nối bằng tương đương trước cho MySQL