我目前正在制作一个表输出,它基本上会逐行列出用户。表输出中的列将由一个特定的SQL列填充,但是来自多个行(例如John Smith有4行,但是列X在此表的每一行上具有不同的值)。
为了给你更多的上下文,这是当前表状态的文本表示。
Name | Col1 | Col2 | Col3
---------------------------------
Name1 | 0 | X | 1
Name2 | 3 | 2 | <--- Value missing
Name3 | 2 | 1 | <--- Value missing (and this continues through the table..
正如您在该表中看到的那样,第一行填充正常 - 但之后的其余行似乎忽略了数据的迭代(因此其余行仅填充2列。
循环的相关代码如下:
while ($row = mysql_fetch_assoc($result)) {
echo "<tr><td>". $row['forename'] . "</td>
<td>". $row['status'] ."</td>";
while ($col = mysql_fetch_assoc($result)) {
if ($col['id'] == $row['id']) {
echo "<td>" . $col['status'] . "</td>";
}
else if ($col['id'] != $row['id']){
echo "</tr>";
break;
}
}
}
有没有人对这可能发生的原因有任何想法?我希望我已经提供了足够的信息,但如果没有,请告诉我! :)
答案 0 :(得分:0)
if ($col['id'] == $row['id'])
{
make a td
}
我认为问题是有时候$ col ['id']!= $ row ['id']
答案 1 :(得分:0)
从查看代码,我可以建议进行调整。
通过在内部mysql_fetch_assoc($result)
循环中调用WHILE
,您将在结果对象中移动指针(尽管不是故意的)。
您应该使用在第一个循环中检索的$row
数组。
如果你真的需要像我所看到的那样进行比较,你最好的选择是先运行整个结果集,然后将个别记录放入一个数组中,然后你可以在循环中使用它,如下所示:
$records = array();
//array to hold the retrieved records from the database
while($row = mysql_fetch_assoc($result)){
//loop through the data
$records[] = $row;
}
//continue with your processing, this time using $records as your result set
//an looping through it this time as an array -- you don't need mysql_fetch_assoc
.....
祝你好运!
答案 2 :(得分:0)
扩展Okekes的想法(欢呼队友)我修改了另一种方法,现在效果非常好!
//declare new array variable
$resultSet[] = array();
//set offset integer
$i = 0;
//While loop to return all rows from query, and place into multi dimensional array format
while ($row = mysql_fetch_assoc($result)) {
$resultSet[$i] = $row;
$i++;
}
//check that the array isn't empty
if ($resultSet) {
$innerCount = "0";
//count how many rows are in the array
$rowCount = count($resultSet);
//loop through the array, each row, then go through inner loop for columns
for ($row = 0; $row < $rowCount; $row=$row+$numRows) {
//declare variables for the row data
$foreName = $resultSet[$row]['forename'];
$surName = $resultSet[$row]['surname'];
echo "<tr><td>" . $foreName . " " . $surName . "</td>";
for ($col = $row; $col < $rowCount; $col++) {
if ($innerCount < $numRows) {
$innerCount++;
$currStatus = $resultSet[$col]['status'];
echo "<td>" . $currStatus . "</td>";
}
else {
echo "</tr>";
$innerCount = "0";
break;
}
}
}
}