0

以前にコードを投稿したことがありますが、何が起こっているのかよくわからなかったため、別の方法で質問していました。

データベースからデータをフェッチして最新情報のフィードを形成するwhileループがいくつかあります。質問する前に、私はmysqliを使用しますが、今はmysqlを使用しているので、この方法の方が快適なので、ループを並べ替えることができます。

各SQLクエリには複数行のデータを含めることができますが、確実に含めることはできないため、whileループが必要です。また、すべてのデータを最後に配列に整理して、すべてのデータをタイムスタンプで並べ替えることができるようにする必要があります(タイムスタンプはまだSQLクエリに含まれていません)。

私が抱えている問題は、すべてを配列に編成することです。現在のように、データのすべてのビットを配列に入れることができるように、すべての閉じ中括弧は配列の後になければなりません。このため、SQLクエリごとに行数が異なる可能性があるため、一部の変数が複数回出力される可能性があります。ちなみにブラケットは今のところこのように配置されていません。

以下のコードでは、whileループの2番目のロットのそれぞれの括弧が変数の直後にあります。これは、テーブルの1行のみが配列に出力されることを意味します。

それがそれを説明することを願っています。それは私ができる最善のことです。2番目のロットのクエリの各データからのすべてのデータを配列に出力できるように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

        }
    }
?>
4

1 に答える 1

0

コードは最初からインデントされているはずです。
助けを得るには、少なくとも自分を助けてください。

それでは、問題がどこにあるかを見てみましょう。
問題が正しく発生した場合は、リクエストごとに一時配列を使用してください。
しかし、前述のように、PDOはfetchAllという名前の強力なツールを提供します。あなたはそれを見てみるべきです。

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

于 2012-07-30T01:32:17.133 に答える