2012-10-01 125 views
0

我試圖從其他表從其他表中添加一列while循環的循環,我想這樣的事情,但似乎並不工作。我怎樣才能實現這樣的事情?據我所知,我需要將data_auth中的變量保存在數組中,但我如何使用循環來回顯它們?從其他表添加數據到其他表

$SQL = mysql_query("SELECT * FROM users ORDER BY data_reg DESC LIMIT $offset, $rowsperpage"); 
while($rand = mysql_fetch_assoc($SQL)){ 
     $id = $rand['id'];    
     $user= $rand['user']; 

     $SQL2 = mysql_query("SELECT data_auth FROM access_log WHERE user = '$user'"); 
     while($rand = mysql_fetch_assoc($SQL2)){ 
      $data_auth = $rand['data_auth']; 
     } 

     ?> 
     <li><?php echo "$user"; ?></li> 
     <li><?php echo "$data_auth"; ?></li> 
     <?php 
     } 
     ?> 

回答

2

據我所知 - 你只是想在與用戶相關的列中顯示所有data_auth值的列表。最簡單的方法是:

$SQL = mysql_query("SELECT * FROM users ORDER BY data_reg DESC LIMIT $offset, $rowsperpage"); 
while($rand = mysql_fetch_assoc($SQL)){ 
     $id = $rand['id'];    
     $user= $rand['user']; 

     $SQL2 = mysql_query("SELECT data_auth FROM access_log WHERE user = '$user'"); 

     ?> 
     <li><?php echo "$user"; ?></li> 
     <li><?php   
       while($rand2 = mysql_fetch_assoc($SQL2)){ 
         echo $rand2['data_auth'] . '<br/>'; 
      } 
      ?> 
     </li> 
     <?php 
     } 
     ?> 

此外,您使用第二while相同的變量名是不是安全的。

或用臨時數組:

$SQL = mysql_query("SELECT * FROM users ORDER BY data_reg DESC LIMIT $offset, $rowsperpage"); 
while($rand = mysql_fetch_assoc($SQL)){ 
     $id = $rand['id'];    
     $user= $rand['user']; 

     $SQL2 = mysql_query("SELECT data_auth FROM access_log WHERE user = '$user'"); 
     $data_auth = array(); 
     while($rand2 = mysql_fetch_assoc($SQL2)){ 
         $data_auth[] = $rand2['data_auth']; 
      } 
     ?> 
     <li><?php echo "$user"; ?></li> 
     <li><?php foreach($data_auth as $da){ 
      echo $da . "<br/>"; 
      } 
      ?> 
     </li> 
     <?php 
     } 
     ?> 
+0

現在好了,我認爲這是正確的解決方案,upvoted :-) – Nelson

+1

嗯...兩項建議是平等的,但在第一種情況下,沒有額外使用的內存'$ data_auth'陣列和沒有第二個循環。還有第三種選擇 - 收集應該在第二個foreach中輸出的html到臨時字符串變量而不是數組中。 –

0

的data_auth變量不能在其他打印while循環它不是由MySQL的獲取,因此你有一個錯字:

<li><?php echo "data_auth"; ?></li> 
3

你可以只使用一個SQL查詢,像這樣:

//$SQL = mysql_query("SELECT users.*,access_log.data_auth FROM users,access_log WHERE users.user = access_log.user ORDER BY data_reg DESC LIMIT $offset, $rowsperpage"); 
//SQL with JOIN syntax 
$SQL = mysql_query("SELECT users.*,access_log.data_auth FROM users INNER JOIN access_log ON users.user = access_log.user ORDER BY data_reg DESC LIMIT $offset, $rowsperpage"); 
while($rand = mysql_fetch_assoc($SQL)){ 
     $id = $rand['id'];    
     $user= $rand['user']; 
     $auth = $rand['data_auth']; 
     ?> 
     <li><?php echo $user; ?></li> 
     <li><?php echo $auth; ?></li> 
<?php 
} 
?> 
+0

+1 1個查詢,爲什麼不參加?因爲它會更快 – AlexP

+0

而且每次訪問登錄時都會得到一條用戶線,而不是一條具有所有訪問事件列表的用戶線。不知道它是否有意義。 –

+0

@AlexP是的,你說得對,我加入JOIN現在:-) – Nelson