【问题标题】:Multiple query data into single html table (PHP, Mysql) array not printing in correct position?多个查询数据到单个 html 表(PHP,Mysql)数组中没有打印在正确的位置?
【发布时间】:2011-09-17 15:57:12
【问题描述】:

我从这个站点获得了代码 sn-p,我使用它如下所示

    $data = array();

while($row = mysql_fetch_assoc($num1)) {$data['row'][] = $row;}
while($row = mysql_fetch_assoc($num2))  {$data['row2'][] = $row;}


$count = count($data['row']);
echo "<table>" ;
echo "<tr>";
echo "<td width='300' bgcolor='#99CCF5' align='Left' style='padding-left:30px'><b>Country</b></td>" ;
echo "<td width='150' bgcolor='#99CCF5' align='center'><b>Mid Estimate 1</b></td>";
echo "<td width='150' bgcolor='#99CCF5' align='center'><b>Mid Estimate 2</b></td>";
echo "</tr>";
for($i=0;$i<=$count;$i++)
{

        if(($i % 2) == 1)
        {
            echo "<tr>" ;
            echo "<td align='center'>" . $data['row'][$i]['Country']."</td>";
            echo "<td align='center'>" . $data['row'][$i]['MidEstimate']."</td>";
            echo "<td align='center'>" . $data['row2'][$i]['MidEstimate']."</td>";
            echo "</tr>" ;
        }else
        {
            echo "<tr>" ;
            echo "<td align='center'>" . $data['row'][$i]['Country'] ."</td>";
            echo "<td align='center'>" . $data['row'][$i]['MidEstimate']."</td>";
            echo "<td align='center'>" . $data['row2'][$i]['MidEstimate']."</td>";
            echo "</tr>" ;
        }

}

echo "</table>" ;

结果如下所示

image1 http://img4.pixa.us/8ba/19338641.jpg

正确的结果应该是这样的

image2 http://img4.pixa.us/c1d/19338642.jpg

也就是说,如果列中的任何值为空,则下一个辅助值将获得该位置。我怎样才能做到这一点?也就是说,如果任何值为空,则该列必须为空。

请提前帮助和感谢。

【问题讨论】:

  • 您的 SQL 和表架构 + 示例数据会有所帮助。您也许可以在 SQL 级别解决这个问题并消除一些代码复杂性。
  • 我在 mysql 中只有一个表。我之前在这个网站上的问题[链接]stackoverflow.com/questions/6341613/… 并且我从这个链接[链接]stackoverflow.com/questions/3613498/… 得到了上面的代码。感谢您的快速响应。
  • 我同意罗宾的观点。看起来您可以使用 JOIN 更有效地接收数据,但至少如果没有您运行的查询,您的代码实际上并没有太大帮助。显然,表格布局也会有很大帮助。
  • 正如我所说,我有一个 mysql 数据库,其中包含一个名为 mtable 的表,其中存储了所有数据。

标签: php mysql arrays html multidimensional-array


【解决方案1】:

您必须收集每个国家/地区的数据。由于数组的键不同步,因此您在问题中的方法会弄乱列表。让我们按“国家/地区”同步您的行:

$data = array();
while($row = mysql_fetch_assoc($num1))
{
    $c = $row['Country'];
    if (!isset($data[$c]))
    {
        $data[$c] = array('Country' => $c);
    }
    $data[$c]['MidEstimate1'] = $row['MidEstimate'];
}
while($row = mysql_fetch_assoc($num2))
{
    $c = $row['Country'];
    if (!isset($data[$c]))
    {
        $data[$c] = array('Country' => $c);
    }
    $data[$c]['MidEstimate2'] = $row['MidEstimate'];
}

现在您的数组中有每个国家/地区的一行,以及来自每个查询的数据。

$i = 0;
foreach ($data as $row)
{
    echo ($i % 2) ? "<tr class='odd'>" : "<tr class='even'>" ;
    echo "<td align='center'>" . $row['Country']."</td>";
    echo "<td align='center'>" . $row['MidEstimate1']."</td>";
    echo "<td align='center'>" . $row['MidEstimate2']."</td>";
    echo "</tr>" ;
}

注意:这仅适用于“国家/地区”字段存在于两个 SQL 查询中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多