Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да показвам албуми с изображения в публикации? [използвайки само PHP и MYSQL]

Първата ви SQL заявка е наред, но за втората искате само да изберете изображенията за текущата публикация (ред) във външния while цикъл, така че втората SQL заявка трябва да бъде:

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

Актуализация за показване само на img3 от пост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>

Поставих втората SQL заявка в if оператор, който проверява дали идентификаторът на текущата публикация е равен на 1. Ако е, тогава SQL заявката избира само реда с "img3" в него. (И ако не е, изпълнява предишната SQL заявка, която избира всички редове.)

Разбира се, това работи само ако знаете идентификатора на публикацията и заглавието на изображението, което искате да покажете. По-общо решение за винаги показване само на третото изображение от първата публикация би било нещо подобно:

<!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 заявка в масив, защото тогава ключовете на масива съответстват на номера на всяка публикация минус един. Ако $key =0, текущият ред е първата публикация и след това използваме SQL заявката, която избира само третото изображение от таблицата с изображения. Ако $key не е 0, ние използваме другата SQL заявка, която избира всички изображения.

В новата SQL заявка LIMIT 1 означава избор само на 1 ред, а OFFSET 2 означава започване с ред 3 (броенето започва от 0, така че отместването 2 връща ред 3).

Добавих ORDER BY id_img, за да се уверя, че изображенията винаги се връщат в същия ред, в реда, в който са добавени към базата данни. (И аз направих същото с id_post в първата заявка.)




  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 услугата не успява да стартира/затваря - изчакване (Ubuntu, MariaDB)

  2. качване на изображения на сървър в пролетния MVC и съхраняване на препратка в базата данни на mysql

  3. свързване на MySQL сървър към NetBeans

  4. 3 начина за намиране на редове, които съдържат малки букви в MySQL

  5. Рамката на обект с миграциите на база данни mysql се провалят при създаване на индекси