引用嵌套循环中的外部循环变量

时间:2013-03-24 20:11:14

标签: php loops while-loop nested-loops

我希望下面的代码循环遍历两个不同的mysql表。外部while循环应该打印一个产品列表,每个table-row是一个新产品。内部while循环应该打印该产品的每个列变量。内部循环设置为查看$ tableheaders以获取有关要打印的列的指导。

内部循环是用外部循环数组中的内容回显表格单元格,内部循环数组指定它应该在外部数组中查找哪一列。

这是我的代码;

$tableheaders=mysql_query("SELECT * from `winetable`");

$products=mysql_query("SELECT * FROM `wines`");

while ($row=mysql_fetch_assoc($products)){
    echo '<tr>';
            while ($rowi=mysql_fetch_assoc($tableheaders)){
            $column=$rowi['Title'];
            echo '<td>';
            echo $row[$column];
            echo '</td>';
        }
    echo '</tr>';
    }

所有这一切都是空白。

现在不使用mySQLi,因为我的WebMatrix在使用它时遇到了一些问题。我认为我的MySQL安装已损坏:)

3 个答案:

答案 0 :(得分:0)

请阅读以下代码,了解我将如何调试您的代码。我还意识到你需要使用mysql_data_seek()重置一个数组:

$tableheaders=mysql_query("SELECT * from `winetable`");
$products=mysql_query("SELECT * FROM `wines`");

//check the number of results before looping
if(mysql_num_rows($tableheaders) > 0 && mysql_num_rows($products) > 0){

    while ($row=mysql_fetch_assoc($products)){
        echo '<tr>';

        //check what is in the array
        var_dump($row);

        while ($rowi=mysql_fetch_assoc($tableheaders)){

            //check what is in the array
            var_dump($rowi);

            $column=$rowi['Title'];
            echo '<td>';
            echo $row[$column];
            echo '</td>';
        }
        echo '</tr>';

        //reset the $tableheaders array pointer back to 0 for next loop
        mysql_data_seek($tableheaders, 0);
    }
}

答案 1 :(得分:0)

尝试这样的事情。 这样做你首先将结果加载到一个数组中,你可以进一步操作并随时重复使用......

<?php

$t = mysql_query("SELECT * FROM `winetable`");
$p = mysql_query("SELECT * FROM `wines`");

if(mysql_num_rows($p) > 0 && mysql_num_rows($t) > 0){
    while ($row=mysql_fetch_assoc($p)){
        $products[] = $row
    }

    while ($row=mysql_fetch_assoc($t)){
        $tableheaders[] = $row;
    }

    foreach($products as $i => $product){ ?>

    <tr><?php
    foreach($tableheaders as $j => $tableheader){
        ?>

        <td><?php echo $row[$tableheader['Title']]; ?></td><?php
    }   
    ?>

    </tr><?php
    }
}

?>

答案 2 :(得分:0)

查看您的代码时,我注意到您没有包含<table></table>(也许您已经拥有但未在您的问题中显示)。可以这么容易吗?某些浏览器(即我认为)在没有这些<table>标记时不会显示表格。

包含

echo '<table>';

在第一个循环之前

echo '</table>';

在代码的末尾(循环之后)

你的htmlsource中是否有任何信息?

只是提示 我会尝试另一种方法来收集有关葡萄酒的信息......这将是创建一个记录集,其中包含所需的表格和输出信息。这将显着提高速度并增加更易读的代码。

类似的东西:

SELECT * FROM `wines` w LEFT JOIN `winetable` wt ON (w.id = wt.id)

当然,正如Theo Kouzelis所提到的,不要使用mysql_functions。