循环访问用户名的问题

时间:2010-07-16 19:39:23

标签: php mysql

我正在尝试遍历用户名数组,并为每个用户名,在每个用户名上执行mysql_query。

<?php
                    for ($i = 0; $i < count($u); $i++) 
                    {
                        $j = $i + 1;
                        $s = $database->checkUserPlayedRecent($u);
                        if (mysql_num_rows($s) > 0)
                        {
                            ?>
                            <tr>
                                    <?php
                                        echo "<td>$j</td>";
                                    ?>

                                    <?php
                                        echo "<td>$u[$i]</td>";
                                    ?>
                                    <?php
                                        echo "<td>$p[$i]</td>";
                                    ?>
                            </tr>
                        <?
                        }
                    }
                    ?>

如您所见,$ u是每个用户名。 我希望每个用户名只出现在echo语句中,如果每个用户名都有num_rows&gt; 0

此刻什么都没有显示出来。 但是应该返回结果!

有人可以帮忙吗。

sql: $q = "SELECT id FROM ".TBL_CONF_RESULTS." WHERE (home_user = '$u' OR away_user = '$u') AND date_submitted >= DATE_SUB(CURDATE(),INTERVAL 14 DAY)";

3 个答案:

答案 0 :(得分:3)

这一行:

for ($i = 0; $i < count($u); $i++) 

表示$u是一个数组 - 而不是一个名称。
$i用于跟踪该数组中的当前索引。


所以,在你的循环中,你应该使用$ u [$ i] - 这将是数组的“当前”行:

$s = $database->checkUserPlayedRecent($u[$i]);


请注意,您可以使用foreach循环重写循环,如下所示:

foreach ($u as $currentPlayer) {
    $s = $database->checkUserPlayedRecent($currentPlayer);
    // ...
}

使用foreach,无需跟踪当前索引 - 在我看来,使代码更容易编写和理解; - )

答案 1 :(得分:0)

我很想重写查询以接受名称数组并使用IN语句,这样您就可以在单个查询中执行整个数据库活动,而不是对数组中的每个条目执行一次。几乎肯定会更快。 如果您向我们展示了您在checkUserPlayedRecent()方法中使用的查询,我们可能会对此有所帮助。

答案 2 :(得分:0)

你应该养成将count()保持在条件之外的习惯。你每次都在计算()同一个数组,这是一个浪费周期。

  

$ total = count($ u);

     

for($ i = o; $ i&lt; $ total; $ i ++)...

我肯定会一次查询这些用户,尤其是当您使用以下sql时查询滥用mysql_num_rows:

  

从用户中选择用户名,计数(用户名),用户名为IN(您的,数组,用户名)按用户名分组;

然后你的foreach循环将迭代结果,你可以引用每一行而不必调用另一个mysql_ *方法。