【发布时间】:2020-07-13 21:40:23
【问题描述】:
我看过类似的问题,但我找不到任何适合我具体情况的答案,所以我希望问一个新的答案会有所帮助。所以我有 3 个表:帖子、en、图像。 posts 是主表,另外两个用外键连接到它。行,“路径”来自图像表,每个帖子都有几个图像路径。所以这就是问题所在,因为在循环中,对于属于该帖子条目的每个图像路径,有关类别、标题和文本的所有信息都会重复。有没有办法确保查询只打印与一行相关的每个数据点一次?这是更好理解的代码:
$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
标题:蓝船
文本:“蓝船”于 1986 年首次制造
图片路径:img/2/0.jpg
类别:0
标题:蓝船
文本:“蓝船”于 1986 年首次制造
图片路径:img/2/1.jpg
类别:0
标题:蓝船
文本:“蓝船”于 1986 年首次制造
图片路径:img/2/3.jpg
如您所见,每次有与其 id 相关联的图像路径时,都会重复该帖子。我该如何防止这种情况?我想要这样的结果:
类别:0
标题:蓝船
文本:“蓝船”于 1986 年首次制造
图片路径:img/2/0.jpg
图片路径:img/2/1.jpg
图片路径:img/2/3.jpg
【问题讨论】:
标签: php sql join group-by inner-join