2013-03-24 138 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。