Galarist_00 Ответов: 2

Как отобразить комментарий только один раз из mysql в PHP?


У меня есть две таблицы: multiple_image и posts

Структуры БД ===>

multiple_image:

| id |  image | imagesid |
--------------------------
| 1  |  name  |    5557  |
| 2  |  name  |    5557  |
| 3  |  name  |    5585  |
--------------------------

posts:

| commentid |  comment  | iamgesid |
------------------------------------
|     1     |   fool    |   5557   |
|     2     |  fool2    |   5585   |


Результат, которого я пытаюсь достичь, таков:
Я хочу отобразить все изображения для комментария, который имеет один и тот же идентификатор imagesid, но моя проблема заключается в том, что комментарий повторяется.

Что я уже пробовал:

$sql = "SELECT image, posts.imagesid, multiple_image.imagesid, comment
        FROM multiple_image JOIN posts ON (multiple_image.imagesid=posts.imagesid)";
$result = $conn->query($sql);

if (!$result) {
    trigger_error('Invalid query: ' . $conn->error);
}

if ($result->num_rows > 0) {

    // output data of each row
while($row = $result->fetch_assoc()) {

echo $row['comment'];
$imgs= "<div id='img_div'><img width='' src='upload/".$row['image']."' ></div>";
echo $imgs;
}
}

2 Ответов

Рейтинг:
1

Richard Deeming

Вам нужно будет выбрать комментарии и изображения отдельно. Я не "делаю" PHP, но что-то вроде этого должно работать:

$sql = "SELECT comment, imagesid FROM posts";
$result = $conn->query($sql);

if (!$result) {
    trigger_error('Invalid query: ' . $conn->error);
}

if ($result->num_rows > 0) {
    // NB: Use a prepared statement to avoid any possibility of SQL Injection:
    $stmt = $conn->prepare("SELECT image FROM multiple_image WHERE imagesid = ?");
    $stmt->bindParam(1, $imagesid);
    
    while($row = $result->fetch_assoc()) {
        // NB: Encode the comment to avoid XSS vulnerabilities:
        echo htmlspecialchars($row['comment']);
        
        $imagesid = $row['imagesid'];
        if ($stmt->execute()) {
            echo "<div id='img_div'>";
            while ($imgrow = $stmt->fetch()) {
                echo "<img src='upload/" . $imgrow['image'] . "'>";
            }
            echo "</div>";
        }
    }
}

NB: Поскольку ваш столбец представляется целым числом, вероятно, не будет никакой опасности SQL-инъекция[^] для вложенного запроса в данном случае. Но в любом случае всегда полезно использовать правильно параметризованные запросы.
PHP: SQL-инъекция - руководство пользователя[^]
РНР: Подготовленные инструкции и хранимые процедуры - руководство пользователя[^]


Galarist_00

Это похоже на POD, и я работаю с объектно-ориентированным PHP

Рейтинг:
0

Member 10947034

$sql = "SELECT distinct image, posts.imagesid, multiple_image.imagesid, comment
        FROM multiple_image JOIN posts ON (multiple_image.imagesid=posts.imagesid)";


Добавьте ключевое слово "distinct" в вышеприведенный запрос

(или) добавьте дополнительную строку с ключевым словом "Group by", как показано ниже

$sql = "SELECT image, posts.imagesid, multiple_image.imagesid, comment
        FROM multiple_image JOIN posts ON (multiple_image.imagesid=posts.imagesid)
        GROUP by image, posts.imagesid, multiple_image.imagesid, comment";


Galarist_00

Все еще показывая один и тот же комментарий рядом с каждым изображением, которое имеет один и тот же imageid