我正在尝试遍历用户名数组,并为每个用户名,在每个用户名上执行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)";
答案 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_ *方法。