0

我正在尝试创建一个订单历史页面。根据 orderdetails_tbl 中的 order_ID 查找所有应用程序的 SQL 语句。这是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 时,它不会显示重复项。

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

4

2 回答 2

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");
于 2013-04-07T11:20:44.413 回答
0

一个技巧是使用别名来使 sql-statements 更具可读性,如下所示:

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

或者

分组依据(示例)

$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 的实际价值是多少?(我问是因为您说您有相同的查询,并且在浏览器中查看时只会得到重复。看起来很奇怪)

于 2013-04-07T11:29:53.143 回答