我正在尝试创建一个订单历史页面。一个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的实际值是多少?(我问,因为你说你有相同的查询,你只得到重复时,在浏览器中查看。