PHP запрос к объединенной таблице производит дубликаты - PullRequest
0 голосов
/ 02 апреля 2020

Я смотрел на похожие вопросы, но не смог найти ответов, которые подходили бы для моей конкретной c ситуации, поэтому я надеялся, что запрос нового поможет. Итак, у меня есть 3 таблицы: сообщения, en, изображения. posts - это основная таблица, а две другие подключаются к ней с помощью внешнего ключа. строка «путь» происходит из таблицы изображений, и к каждому сообщению привязано несколько путей к изображениям. так что здесь возникает проблема, потому что в l oop вся информация о категории, заголовке и тексте повторяется для каждого пути изображения, принадлежащего этой записи. Есть ли способ убедиться, что запрос печатает каждую точку данных, связанную со строкой, только один раз? вот код для лучшего понимания:

$sql = "
SELECT *
FROM posts
INNER JOIN en
ON posts.id = en.post
INNER JOIN images
ON posts.id = images.post";

$result = $conn -> query($sql);

if (mysqli_num_rows($result) > 0) {
    while( $row = $result->fetch_assoc()) {
        echo "<p>".$row['category']."</p>";
        echo "<p>".$row['title']."</p>";
        echo "<p>".$row['text']."</p>";
        echo "<p>".$row['path']."</p>";
    }
}else{
    echo "<h1>No posts available...</h1>";
}

результаты:

категория: 0

название: Blue Boat

текст: «Blue Boat» впервые был сделан в 1986

путь к изображению: img / 2 / 0.jpg

категория: 0

название: Blue Boat

текст: «синий Лодка »впервые была изготовлена ​​в 1986 году

путь изображения: img / 2 / 1.jpg

категория: 0

название: Blue Boat

текст: «Синяя лодка» была впервые создана в 1986 году

путь к изображению: img / 2 / 3.jpg

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

категория: 0

title: Blue Boat

текст: «Blue Boat» впервые был создан в 1986

путь к изображению: img / 2 / 0.jpg

путь к изображению: img / 2 / 1.jpg

путь к изображению: img / 2 / 3.jpg

1 Ответ

0 голосов
/ 02 апреля 2020

Возможно, вы хотите агрегации. Предполагая, что вы используете MySQL, вы можете объединить пути изображения в строку:

SELECT p.category, p.title, p.text, GROUP_CONCAT(i.path)
FROM posts p INNER JOIN
     en
     ON p.id = en.post INNER JOIN
     images i
     ON p.id = i.post
GROUP BY p.category, p.title, p.text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...