0

放下一段时间后回到我的项目:循环查询

我知道可以清理以下代码(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>";
}
?>
4

2 回答 2

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']. 只需执行一次并在循环内重用结果。

于 2013-11-08T01:20:27.897 回答
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 内部结构的资源。

于 2013-11-08T01:18:48.847 回答