while循环无限重复

时间:2011-09-26 14:53:29

标签: php mysql forms drop-down-menu

我有一个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>";

3 个答案:

答案 0 :(得分:6)

您是否尝试在mysql监视器中手动运行该查询?代码中的任何内容都不会产生无限循环,因此很可能您的查询没有按预期进行连接,并且正在执行跨产品类型的操作并创建“重复”记录。

特别是,您的查询看起来非常可疑 - 您正在使用延迟的“来自多个表”方法,而不是显式指定连接类型,并且您正在使用成员表两次(FROM members ...和{{ 1}})。您没有指定原始成员表与已加入/别名INNER JOIN members之间的关系,因此很可能您正在进行m跨产品提取。


假设您似乎只为您的下拉列表提取了一个事件名称,您可以尝试删除未使用的表 - ditch members * membersdates。这将简化相当大的事情,然后(猜测)您可以将查询减少到:

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