2014-05-15 34 views
0

我正在爲新添加的評論設計一個非常簡單的電子郵件通知系統。它的工作原理是這樣的:PHP - 在循環中多次使用mysql_fetch_assoc()。

  1. 環通項目的用戶
  2. 爲每個用戶,遍歷寫在最後時刻所有評論
  3. 如果有不被用戶寫任何評論,他們推到數組
  4. 如果評論數組不爲空,發送電子郵件給用戶

下面是一些代碼:

<?php 
$users_query = mysql_query("SELECT * FROM users"); 

$comments_query = mysql_query("SELECT * FROM comments c, users u WHERE c.date > DATE_SUB(NOW(), INTERVAL 1 HOUR) and c.user_id = u.id"); 

while ($user = mysql_fetch_assoc($users_query)) { 
    $commentsArr = array(); 

    while ($comment = mysql_fetch_assoc($comments_query)) { 
     if ($comment['email'] != $user['email']) { 
     array_push($commentsArr, $comment['comment']); 
     } 
    } 

    // send $commentsArr by email to $user['email'] 
} 
?> 

問題是,同一個mysql_fetch_assoc不能在單個頁面上多次使用。我試着用正在重置的mysql_data_seek($comments_query, 0);指針但只是把下面的錯誤:

Warning: mysql_data_seek() [function.mysql-data-seek]: Offset 0 is invalid for MySQL result index 4 (or the query data is unbuffered) 

是否有處理這種其他方法嗎?所有其他有類似問題的人都被建議加入他們的表格,而不是將他們分開。我不認爲我可以這樣做,因爲我必須先通過所有用戶,所以如果我加入他們,我將擁有比用戶更多的行。

無論如何,有沒有辦法在循環內循環評論?

+5

你不應該使用mysql_,因爲它是貶值,使用mysqli_代替或PDO – Enjoyted

回答

1

我從mysql切換到mysqli現在mysqli_data_seek($comments_query, 0);按預期工作。

0

使用$ commentsArr陣列中,同時循環之外:

<?php 
    $users_query = mysql_query("SELECT * FROM users"); 

    $comments_query = mysql_query("SELECT * FROM comments c, users u WHERE c.date > DATE_SUB(NOW(), INTERVAL 1 HOUR) and c.user_id = u.id"); 
    $commentsArr = array(); 
    while ($user = mysql_fetch_assoc($users_query)) { 


     while ($comment = mysql_fetch_assoc($comments_query)) { 
      if ($comment['email'] != $user['email']) { 
      array_push($commentsArr, $comment['comment']); 
      } 
     } 

     // send $commentsArr by email to $user['email'] 
    } 
    ?> 
+0

這不會有所作爲,因爲這個問題是'mysql_fetch_assoc'被稱爲多次。 –

+0

如果您在while循環中調用,則表示它顯示一個空數組。 – Ramki

1
<?php 
$users_query = mysql_query("SELECT * FROM users"); 
$users = mysql_fetch_array($users_query); 

$comments_query = mysql_query("SELECT * FROM comments c, users u WHERE c.date > DATE_SUB(NOW(), INTERVAL 1 HOUR) and c.user_id = u.id"); 

$comments = mysql_fetch_array($comments_query) 

foreach($user as $users) { 
    $commentsArr = array(); 

    foreach($comment as $comments) { 
    if ($comment['email'] != $user['email']) { 
    array_push($commentsArr, $comment['comment']); 
    } 
    } 

    // send $commentsArr by email to $user['email'] 
} 
?>