繁体   English   中英

连接表上的 PHP 查询会产生重复项

[英]PHP query on joined table produces duplicates

我看过类似的问题,但我找不到任何适合我的具体情况的答案,所以我希望提出一个新的问题会有所帮助。 所以我有 3 个表:posts、en、images。 post是主表,另外两个用外键连接到它。 行,“路径”来自图像表,并且每个帖子绑定了几个图像路径。 所以这就是问题所在,因为在循环中,对于属于该帖子条目的每个图像路径,有关类别、标题和文本的所有信息都会重复。 有没有办法确保查询只打印与一行相关的每个数据点一次? 这是更好地理解的代码:

$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

也许你想要聚合。 假设您使用的是 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM