来自mysql查询的foreach循环

时间:2013-11-08 00:42:06

标签: php mysql foreach

在放下一段时间之后回到我的项目:Cycling through a query

据我所知,可以清除以下代码(PHP使用和表格安排),并且不推荐使用MySQL命令。 (我正在研究那部分)。

但我不明白为什么我不能做这项工作。 print_r()出现Resource ID #5错误。我的结果显示了2个表,每个表都来自相同的课程。我期待8张桌子,每张桌子都有不同的路线。

我应该使用while循环吗?如果是这样的话?我意识到这是基本的,但这对我来说仍然是全新的,所以请保持温和。

<?php

include 'inc.php';

$varVeh=$_POST['Veh_num'];
$sql_course="select course_num from hc_course";
$results_course=mysql_query($sql_course);

print_R($results_course);

foreach(mysql_fetch_array($results_course) as $rc)
{
    $sql_HiScores = "SELECT c.course_name as course,  e.distance as distance, e.score as score, e.time as time, e.user as User from hc_entries e left join hc_course c on e.course=c.course_num WHERE c.course_num=$rc and e.vehicle=$varVeh ORDER BY course, score DESC ";
    $result_HiScores = mysql_query($sql_HiScores);

    $sql_vehName="select  Veh_name from hc_vehicle_type where Veh_num=$varVeh ";
    $result_vehName = mysql_query($sql_vehName);
    $vehName=mysql_fetch_assoc($result_vehName);

    echo "<table><tr><th>Best Scores for ".$vehName['Veh_name']."</th> </tr></table>";
    echo "<table border='1'>";
    echo "<tr><th>Course</th><th>Score</th><th>Distance</th><th>Player</th><th>Time</th></tr>";

    while($row = mysql_fetch_array($result_HiScores))
    {
        echo "<tr>";  
        echo "<td>" .$row['course'] . "</td>";
        echo "<td>" .$row['score'] . "</td>";
        echo "<td>" .$row['distance'] . "</td>";
        echo "<td>" .$row['User'] . "</td>";
    }

    echo "</table>";
}
?>

2 个答案:

答案 0 :(得分:1)

mysql_fetch_array只返回结果的一行行,而不是所有行。您的foreach循环只是循环遍历第一行结果中的列。

如果您想处理所有结果,请写下:

while ($rc = mysql_fetch_array($results_course))

然后在循环中,使用$rc['course_num']从该行获取课程。

但我不明白为什么你需要第一个循环。您正在循环中的第一个查询中加入hc_courseshc_entries表。为什么不使用相同的查询,但没有c.course_num = $rc条件,所以它一次获得所有课程而不是一次完成一门课程?循环遍历这些结果,并在每次课程编号更改时启动新表。

以下是对此的查询:

SELECT c.course_name as course,
       e.distance as distance,
       e.score as score,
       e.time as time,
       e.user as User,
       c.course_num as course_num
FROM hc_entries e
JOIN hc_course c ON e.course=c.course_num
WHERE e.vehicle=$varVeh
ORDER BY course, score DESC

然后PHP看起来像:

$last_course = null;

while ($row = mysql_fetch_assoc($results_HiScores) {
    if ($row['course_num'] !== $last_course) {
        // New course number, start a new table
        if ($last_course !== null) {
            // Close out last table, if any
            echo '</table>';
        }
        $last_course = $row['course_num'];
        echo "<table><tr><th>Best Scores for ".$vehName['Veh_name']."</th> </tr></table>";
        echo "<table border='1'>";
        echo "<tr><th>Course</th><th>Score</th><th>Distance</th><th>Player</th><th>Time</th></tr>";
    }
    echo "<tr>";  
    echo "<td>" .$row['course'] . "</td>";
    echo "<td>" .$row['score'] . "</td>";
    echo "<td>" .$row['distance'] . "</td>";
    echo "<td>" .$row['User'] . "</td>";
    echo "</tr>";
}
if ($last_course !== null) {
    echo "</table>";
}

你不应该在循环中进行hc_vehicle_type查询。它不使用在循环期间发生变化的任何变量,它只是查找$_POST['Veh_num']的名称。只需执行一次并在循环中重用结果。

答案 1 :(得分:0)

尝试:

foreach(mysql_fetch_array($results_course, MYSQL_ASSOC) as $rc)
{
    ....
}

如果没有给出第二个参数,则假定为MYSQL_BOTH,因此数组具有列名,列号为0,1 ...,n。所以你遍历结果集两次(列名和列号)

RTMF:http://us1.php.net/manual/en/function.mysql-fetch-array.php

The print_r() gives Resource ID #5 error这不是错误!返回值mysql_query()是结果集。它只是PHP内部结构的资源。

相关问题