PHP和SQL返回重复的结果


PHP and SQL returning duplicate results

我正在尝试创建一个订单历史页面。一个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它不显示重复。

谢谢你的时间。任何建议都将非常欢迎!

Use 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");

一个技巧是使用别名使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语句。

截然不同:(例子)

$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);

GROUP BY (example)

$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的实际值是多少?(我问,因为你说你有相同的查询,你只得到重复时,在浏览器中查看。