我正在尝试创建订单历史记录页面。一个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时,它不显示重复项。
为你的时间干杯。任何建议都将受到极大的欢迎!
答案 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的实际价值是多少? (我问,因为你说你有相同的查询,你只能在浏览器中查看时重复。看起来很奇怪)