在放下一段时间之后回到我的项目: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>";
}
?>
答案 0 :(得分:1)
mysql_fetch_array
只返回结果的一行行,而不是所有行。您的foreach
循环只是循环遍历第一行结果中的列。
如果您想处理所有结果,请写下:
while ($rc = mysql_fetch_array($results_course))
然后在循环中,使用$rc['course_num']
从该行获取课程。
但我不明白为什么你需要第一个循环。您正在循环中的第一个查询中加入hc_courses
和hc_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内部结构的资源。