【问题标题】:PHP query on joined table produces duplicates连接表上的 PHP 查询产生重复项
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2012-06-05
      • 2011-08-15
      • 2014-07-10
      • 2016-06-02
      • 2016-01-05
      相关资源
      最近更新 更多