2012-07-30 87 views
0

我之前已經發布了代碼,但有不同的要求,因爲我不知道發生了什麼。在eachother中分開while循環

我有幾個while循環從數據庫中提取數據以形成最新信息的源。在你問我之前我會使用mysqli,但現在只是使用mysql,所以我可以得到循環排序,因爲我覺得這樣更舒適。

每個sql查詢都可以但不一定有幾行數據,所以需要一個while循環。我還必須將所有數據組織到最後的數組中,以便它們都可以按時間戳排序(時間戳不在sql查詢中)。

我遇到的問題是要將它們全部組織到數組中,並按照現在的方式進行組織,所有結束大括號必須位於數組之後,以便可以將每一位數據放入數組中。由於這個原因,一些變量可能會被輸出多次,因爲每個sql查詢中可能有不同數量的行。順便提一下,括號不是這樣排列的。

在下面的代碼中,第二批while循環中的每一個的括號都在變量之後。這意味着表中只有一行輸出到陣列中。

我希望這可以解釋它。這是我能做的最好的事情。如何安排while循環,以便將來自第二批查詢的每個數據的所有數據輸出到數組中?

<?php 
    //fetch favourited artist(s) 
    $fetchartistFavourite = mysql_query("SELECT * FROM artistfavourites WHERE username = '$username' AND password = '$pass';")or die(mysql_error()); 
    while ($artistFavourite = mysql_fetch_array($fetchartistFavourite)){ 

     $favouritedArtist = $artistFavourite['artistname']; 
     $favouritedArtistUrl = $artistFavourite['artisturl']; 

     //fetch favourite track(s) 
     $fetchtrackFavourite = mysql_query ("SELECT * FROM trackfavourites WHERE username = '$username' AND password = '$pass'")or die(mysql_error()); 
     while ($trackFavourite = mysql_fetch_array($fetchtrackFavourite)){ 
      $favouritedTrack = $trackFavourite['artistname']; 
      $favouritedTrackUrl = $trackFavourite['artisturl']; 

      //Get news from favourited artist(s) 
      //Get updates to bio 
      $fetchupdatedBio = mysql_query ("SELECT bio FROM members WHERE artistname = '$favouritedArtist'")or die(mysql_error()); 
      while ($updatedBio = mysql_fetch_array($fetchupdatedBio)){ 
       $updatedBio = $updatedBio['bio']; 
      } 

      //Get any new pictures 
      $fetchPic = mysql_query ("SELECT picurl FROM pictures WHERE artistname = '$favouritedArtist'")or die(mysql_error()); 
      while ($pic = mysql_fetch_array($fetchPic)){ 
       $pic = $pic['picurl']; 
      } 

      //Get any new tracks 
      $fetchTracks = mysql_query ("SELECT * FROM tracks WHERE artistname = '$favouritedArtist'")or die(mysql_error()); 
      while ($tracks = mysql_fetch_array($fetchTracks)){ 
       $trackurl = $tracks['trackurl']; 
       $trackname = $tracks['trackname']; 
      } 

      //Get any new gigs 
      $fetchGigs = mysql_query ("SELECT * FROM gigs WHERE artistname = '$favouritedArtist'")or die(mysql_error()); 
      while ($gigs = mysql_fetch_array($fetchGigs)){ 
       //arrange gig data into format to be echoed 
       $gig = $favouritedArtist.' is playing for the gig ' .$gigs['gigname'].' at ' .$gigs['venue'].' on the '.$gigs['day'].'th of '.$gigs['month'].', '.$gigs['year']; 
      } 

      //Get any new sessions 
      $fetchSessions = mysql_query ("SELECT title FROM sessions WHERE artistname = '$favouritedArtist'")or die(mysql_error()); 
      while ($sessions = mysql_fetch_array($fetchSessions)){ 
       $sessionName = $sessions ['title']; 
      } 

      //Get new tracks from favourited tracks(s)if the artist has not been favourited 
      $fetchnewTrack = mysql_query ("SELECT * FROM tracks WHERE artistname = '$favouritedTrack' AND artistname !='$favouritedArtist'")or die(mysql_error()); 
      while ($newTrack = mysql_fetch_array($fetchnewTrack)){ 
       $trackname2 = $newTrack['trackname']; 
       $trackurl2 = $newTrack['trackname']; 
      } 

      //asign all variables into an array 
      //echo array 

     } 
    } 
?> 
+0

您沒有SQL注入保護。這不是你應該「等到你舒服的循環」才能添加的東西。如果您現在已經遷移到PDO,準備好的語句將防止注入攻擊,並且可以使用'fetchAll()'跳過這種凌亂的深層嵌套。 – 2012-07-30 01:29:13

回答

0

你的代碼應該從一開始就縮進。
爲了獲得幫助,請至少讓自己成爲可以幫助的人。

現在讓我們看看問題出在哪裏。
如果我確實正確地解決了您的問題,請爲每個請求使用臨時數組。但是,正如所說的,PDO爲您提供了一個名爲fetchAll的強大工具。你應該看看它。

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

+0

代碼重新格式化更適合編輯而不是答案,除非您現在發佈答案 – 2012-07-30 01:36:12

+0

對不起我的壞。我現在編輯。 – Jerska 2012-07-30 01:37:20

+0

沒問題。您是否將其作爲修改發佈? @回覆我是因爲2位擁有2000+代表的人必須批准您的修改 – 2012-07-30 01:39:17