我有一个while循环,它使用mysql表中的值填充下拉框。只有两个匹配的记录,它一遍又一遍地重复它们。我如何只显示一次记录?:
$query = "SELECT * FROM members, sportevents, dates, results, event, userlogin ".
"INNER JOIN members AS m ON userlogin.id = m.id " .
"WHERE userlogin.username = '$un' " .
"AND sportevents.id = members.id " .
"AND sportevents.event_id = event.id " .
"AND sportevents.date_id = dates.id " .
"AND sportevents.result_id = results.id";
echo "<form method='POST' action='display.php'>";
echo "Please Select Your Event<br />";
echo "<select name='event'>";
echo "<option>Select Your Event</option>";
$results = mysql_query($query)
or die(mysql_error());
while ($row = mysql_fetch_array($results)) {
echo "<option>";
echo $row['eventname'];
echo "</option>";
}
echo "</select>";
echo "<input type='submit' value='Go'>";
echo "</form>";
答案 0 :(得分:6)
您是否尝试在mysql监视器中手动运行该查询?代码中的任何内容都不会产生无限循环,因此很可能您的查询没有按预期进行连接,并且正在执行跨产品类型的操作并创建“重复”记录。
特别是,您的查询看起来非常可疑 - 您正在使用延迟的“来自多个表”方法,而不是显式指定连接类型,并且您正在使用成员表两次(FROM members ...
和{{ 1}})。您没有指定原始成员表与已加入/别名INNER JOIN members
之间的关系,因此很可能您正在进行m
跨产品提取。
假设您似乎只为您的下拉列表提取了一个事件名称,您可以尝试删除未使用的表 - ditch members * members
和dates
。这将简化相当大的事情,然后(猜测)您可以将查询减少到:
results
我不知道成员/用户登录是否需要加入 - 它似乎只是将sportevents.id提供给成员,但在不知道您的数据库架构的情况下,我尝试尽可能地重新创建原始查询。
答案 1 :(得分:0)
您可以随时尝试将SELECT
语句更改为SELECT DISTINCT
语句。这样可以防止所选字段的重复
要么在显示之前阅读所有结果,要么使用array_unique()
之类的内容对其进行重复数据删除。
答案 2 :(得分:0)
结帐我的例子。这将有助于您理解。因为这段代码100%为我工作。研究它并获得解决方案。
您应该使用DISTINCT
关键字和GROUP BY
关键字。这是防止重复价值的主要因素。
<?php
$gtid = $_GET['idvc'];
if(isset($_GET['idvc']))
{
$sql = mysql_query("SELECT DISTINCT gallery_types.gt_id, gallery_types_category.gtc_id, gallery_types_category.gt_category, gallery_types_category.gtc_image FROM gallery_types, gallery_types_category WHERE $_GET[idvc]=gtid GROUP BY gt_category");
mysql_select_db($database,$con);
while($row = mysql_fetch_array($sql))
{?>
<table>
<tr>
<td width="100px"><?php echo $row['gt_id'] ?></td>
<td width="100px"><?php echo $row['gtc_id'] ?></td>
<td width="300px"><?php echo $row['gt_category'] ?></td>
<td width="150px">
<a href='view_all_images.php?idvai=<?php echo $row[gtc_id] ?>' target='_blank'>
<img width='50' height='50' src='<?php echo $row[gtc_image] ?>' />
</a>
</td>
</tr>
</table>
<?php
}
}
?>
更好地理解,遵循以下方法,
$sql = mysql_query("SELECT DISTINCT table1.t1id, table2.t2id, table2.t2name FROM table1, table2 WHERE t1id=t2id GROUP BY t2name");