2013-08-21 38 views
0

我有2個表,評論和八卦。
閒話有3列:id,userid,八卦。
評論有4列:id,userid,gossipid,comment。
我寫了這段代碼,以便程序迴應所有的流言和每個八卦特有的註釋。
爲什麼不是第二個mysqli_fetch_assoc執行?

$query = 'SELECT * FROM gossips ORDER BY id DESC LIMIT 0,10'; 
          $result = mysqli_query($cxn, $query) 
           or die("Couldn't execute query"); 
          while($row = mysqli_fetch_assoc($result)) 
          { 
            echo '<div class="gossip">'.$row['gossip'].'</div><form action="comment.php" method="post"><input type="hidden" name="gossipid" value="'.$row['id'].'" />'; 
            echo '<input type="text" name="comment" placeholder="Write your comment here"/><br /><input type="submit" value="Comment" /></form><br />'; 
             $querycomment = "SELECT * FROM comment WHERE gossipid ='{$row['id']}' ORDER BY id DESC"; 
             $resultcomment = mysqli_query($cxn, $query) 
              or die("Couldn't fetch comments."); 
             while($comments = mysqli_fetch_assoc($resultcomment)) 
             { 
              echo $comments['comment']; 
             } 
          } 


此代碼的輸出僅呼應八卦,並且不執行所述第二while循環。可能是什麼問題呢 ?

+0

那麼,首先我會說if子句永不爲真。你有證實嗎? – hakre

回答

1

您第一次經歷該循環時,您會瀏覽整個$resultcomment結果集。當外部$result循環的SECOND迭代啓動時,沒有更多的數據要從第二個查詢中提取,因此實際上內循環只運行於$result集合中的第一條記錄。

由於您似乎在使用外部循環的數據過濾內部循環的結果,爲什麼不將內部查詢基於相同的數據,因此您不會吸引整個表格並丟棄所有內容,除了匹配記錄?這是一個可怕的浪費。

更多的東西一樣

SELECT * FROM gossips 
while(fetch gossip) { 
    SELECT * FROM comment WHERE id = gossip.id 
} 

這是較爲有效的,因爲你只獲取你真正想要顯示的註釋。進一步的優化是將兩個查詢重寫爲一個單獨的JOIN查詢,用一些循環邏輯來檢測何時在閒談之間進行切換。

+0

如果我把SELECT FROM註釋放在第一個裏面,我會一直有同樣的問題,因爲我會在第一個裏面有一個mysqli_fetch_assoc。 –

+0

在這兩種情況下,您還使用** SAME **查詢字符串調用query(),所以您的'$ querycomment'永遠不會被執行:您只需運行兩次$ query。 –

+0

看我編輯了你說的代碼,仍然沒有工作。只要給我適當的語法。 –

相關問題