【问题标题】:Duplicates with INNER JOIN even with DISTINCT即使使用 DISTINCT 也会使用 INNER JOIN 重复
【发布时间】:2017-03-30 14:43:28
【问题描述】:

由于我从另一个表中添加了图像,它给了我重复,我不知道为什么。我已经输入了 DISTINCT 但没有任何结果。

在这里您可以看到表格“照片”。我的代码的结果将是“Internnummer 1”的两倍和“Internnummer 2”的三倍。

实习生 |伏尔加 |福托纳姆
1 | 0 | Image_1.jpg
1 | 1 | Image_2.jpg
2 | 0 | Image_3.jpg
2 | 1 | Image_4.jpg
2 | 2 | Image_5.jpg

在我已经让它工作的代码中,只显示“VolgNr”0 的图像。但是,它仍然复制了其余的数据。

每当我使用它时,一切都很好,当然除了图像。

sql = "SELECT DISTINCT * FROM 场合内连接照片 ON 场合.Internnummer = fotos.Internnummer";

完整代码:

<?php

    $sql = "SELECT DISTINCT * FROM occasions INNER JOIN fotos ON occasions.Internnummer = fotos.Internnummer";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {

        while($row = $result->fetch_assoc()) {
            echo
            "<div class='oc-item'>" .
            // Product image
            "<div class='oc-image'>" .
            "<img src='http://example.com/images/" . ($row['VolgNr'] == 0 ? $row["Fotonaam"] : $row['OmschrijvingNL']) . "'/>" .
            "</div>".
            // Product information
            "<div class='oc-info'><b>" .
            "<a href=\"occasion?id=".$row['Internnummer']."\" >". $row["OmschrijvingNL"]. "</a>" .
            "</b>".
            "<p>" . ($row['Prijs'] == 0 ? 'Prijs op aanvraag' : $row['Prijs']) . "</p><br />" .
            "<p>" .
            $row["Memotekst1NL"]. "</p>" . "<p>" .
            $row["Memotekst2NL"]. "</p>" . "<p>" .
            $row["Memotekst3NL"]. "</p>" . "<p>" .
            $row["Memotekst4NL"]. "</p>" . "<p>" .
            $row["Memotekst5NL"]. "</p>" . "<p>" .
            "<a href=\"occasion?id=".$row['Internnummer']."\" >"."Lees meer..."."</a>" .
            "</div>" .

            "</div>";

            }

    } else {
        echo "Geen resultaten gevonden.";
    }
?>

【问题讨论】:

  • DISTINCT 意味着每一行都是唯一的,并不是说它不会重复基表中的数据。使用适合您需要的分组或使用某些东西来补充水分。
  • 是的,我明白了,但不是每一行都是唯一的,对吧...?重复项具有所有相同的“Internummer”。他们唯一的区别是图像,但每当我删除完整图像时,它仍然显示重复,而它应该只检查“Internnummer”。
  • 在你给我们的例子中,行是唯一的,没有重复。好像没有加入?并且DISTINCT * 等于group by 按顺序使用所有表中的所有字段。

标签: php mysql distinct


【解决方案1】:

这个问题很容易解决。我添加了 WHERE 并且重复项消失了。

SELECT * FROM fotos INNER JOIN occasions ON occasions.Internnummer = fotos.Internnummer WHERE VolgNr = 0 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2013-11-11
    相关资源
    最近更新 更多