2013-03-24 140 views
-2

我希望下面的代码循环两个不同的mysql表。外部while循环应打印产品列表,每个表格行都是新产品。内部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安装已损坏,我认为:)

+0

我会推荐使用mysqli函数,因为mysql已折旧。除此之外,你的代码看起来很好,尝试在$ row和$ rowi上运行var_dump()来查看返回的内容。可能值得向你展示MySQL的统计信息和var转储,以获得更多关于你的问题的帮助。 – 2013-03-24 20:22:23

+0

var_dump在两个循环中都返回bool(false)... – 2013-03-24 20:36:01

+0

你在做while循环中的var转储吗?如果是这样,请尝试在while循环之前在$ tableheaders&$ products上运行mysqli_num_rows()。如果它们返回0,那么你知道你的数据库表是ether空的,或者你的MySQL表名是错误的。如果他们大于0,你正在做var dumps错误http://php.net/manual/en/mysqli-result.num-rows.php – 2013-03-24 20:49:28

回答

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); 
    } 
} 
+0

非常感谢你!这是重新设置$ tableheaders的技巧:) – 2013-03-24 21:20:18

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 
    } 
} 

?> 
+0

欢迎来到SO,但为了大家的缘故:请不要在您的答案中使用[已弃用的扩展名](http://www.php.net/mysql_query)。 。看看链接,注意页面顶部的红色框,并查看“PDO”和“mysqli_ *” – 2013-03-24 21:45:16

0

你的代码看,我注意到,你不<table></table>包含有不(也许你有但在你的问题中没有显示)。它可以如此简单吗?有些浏览器(即我想)在没有这些<table>标签时不会显示表格。

包括

echo '<table>'; 

第一循环

echo '</table>'; 

在代码的末尾(循环后)

是否有任何信息转起来之前,你的htmlsource?

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

喜欢的东西:

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

西奥Kouzelis提到的,当然还有,请不要使用mysql_functions。