2012-07-30 88 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