PHP和SQL返回重复的结果

时间:2013-04-07 11:12:52

标签: php sql phpmyadmin duplicates

我正在尝试创建订单历史记录页面。一个SQL语句,它根据orderdetails_tbl中的order_ID查找所有应用程序。这是SQL。

SELECT * FROM applications_tbl INNER JOIN orderdetails_tbl ON orderdetails_tbl.app_ID = applications_tbl.app_ID WHERE orderdetails_tbl.order_ID = $orderID

使用此PHP显示结果。

$result = mysql_query("SELECT * 
FROM applications_tbl
INNER JOIN orderdetails_tbl ON orderdetails_tbl.app_ID = applications_tbl.app_ID WHERE orderdetails_tbl.order_ID = ".$order_ID."");
$row = mysql_fetch_assoc($result);
echo "<table>";
do { ?>

    <tr style="background-color:#fff">
    <td> <img src="getimage.php?ID=<?php echo $row['app_ID']; ?>" width="100" height="100" alt="IMAGE" /></td>
           <td width="20%"><?php echo $row['app_name']; ?></td>
           <td><?php echo $row['app_desc']; ?></td>
           <td width="15%"><?php echo $row['app_cost']; ?></td>
     </tr>    
     <?php  
 } while ($row = mysql_fetch_assoc($result)); 

SQL返回正确的值,PHP正确显示它们。我的问题是它在网页上返回了许多重复的结果。它似乎是随机的,但我注意到订单中的应用/项目越多,重复结果就越多。在phpMyAdmin中,当我运行SQL时,它不显示重复项。

为你的时间干杯。任何建议都将受到极大的欢迎!

2 个答案:

答案 0 :(得分:1)

使用GROUP BY

$result = mysql_query("SELECT * FROM applications_tbl
INNER JOIN orderdetails_tbl ON orderdetails_tbl.app_ID = applications_tbl.app_ID 
WHERE orderdetails_tbl.order_ID = ".$order_ID." GROUP BY app_ID");

答案 1 :(得分:0)

提示是使用别名来使sql语句更具可读性:

$result = mysql_query("SELECT * FROM applications_tbl at INNER JOIN orderdetails_tbl od ON od.app_ID = at.app_ID WHERE od.order_ID = ".$order_ID);

但是要回答你的问题,你可以在一个字段上使用DISTINCT并列出你想要包含在记录集中的字段,或者在SQL语句的末尾添加GROUP BY语句。

DISTINCT:(示例)

$result = mysql_query("SELECT DISTINCT at.id, od.app_ID FROM applications_tbl at INNER JOIN orderdetails_tbl od ON od.app_ID = at.app_ID WHERE od.order_ID = ".$order_ID);

OR

GROUP BY (示例)

$result = mysql_query("SELECT * FROM applications_tbl at INNER JOIN orderdetails_tbl od ON od.app_ID = at.app_ID WHERE od.order_ID = ".$order_ID . " GROUP BY at.id");

$ order_ID的实际价值是多少? (我问,因为你说你有相同的查询,你只能在浏览器中查看时重复。看起来很奇怪)