在左连接上返回相同的行两次

时间:2013-03-25 15:32:18

标签: php mysql

我正在运行查询以查找产品的数量是否大于0以及其日期是否符合某个参数。这些结果通过一个while循环运行,以便在页面上列出。我遇到的问题是,由于我的参数,它会从每个表中选择两次相同的ID ...导致项目显示两次。我当然不希望这样。

这是我的查询。

SELECT * 
    FROM `trade_show_inventory` 
    LEFT JOIN `trade_show_reserved` 
    ON `trade_show_inventory`.`ID` = `trade_show_reserved`.`ProductID` 
    WHERE `trade_show_inventory`.`Quantity` > 0  
    OR `trade_show_reserved`.`DateReserved` + INTERVAL 5 DAY <= '2013-03-31' 
    ORDER BY `trade_show_inventory`.`ProductName`

如果我的数量为1和1的用户签出了两次相同的产品,则查询结果如下图所示。查看ID 6,您将看到结果。我希望结果是,我希望能够从DateReserved查询所有日期,同时检查大于0的数量。同时不要两次显示相同的产品。 DateReserved来自不同的表,而不是图片中突出显示的ID。我将如何实现这一结果?我需要在while循环中做些什么吗?任何想法都将不胜感激。

这是我的while循环。

        while ($results = mysqli_fetch_assoc($query)) {
        echo $results['ProductName'];
        echo
        "<li>
            <img style='width: 200px; height: 200px' src='images/inventory/" . $results['Image'] . "'/>" . 
            "<div class='infoContainer'>" .
            "<a class='productLink' href='/ts/selectItems.php?status=active&id=" . $results['ID'] . "'>" . $results['ProductName'] . "</a>" . 
            "<br />" . 
            "<i>Currently Available </i>" . 
            "<i class='quantity'>" . $results['Quantity'] . "</i>" . 
            "</div>" .
        "</li>";
    }

Results from query

1 个答案:

答案 0 :(得分:0)

SELECT [just the columns you need] 
    FROM `trade_show_inventory` 
    LEFT JOIN `trade_show_reserved` 
    ON `trade_show_inventory`.`ID` = `trade_show_reserved`.`ProductID` 
    WHERE `trade_show_inventory`.`Quantity` > 0  
    OR `trade_show_reserved`.`DateReserved` + INTERVAL 5 DAY <= '2013-03-31' 
    ORDER BY `trade_show_inventory`.`ProductName`
    GROUP BY [just the columns you need]

如果从中删除RID列,则GROUP BY将消除重复项。