1

「ニュースフィード」を自分のサイトに組み込んで、2つの異なるテーブルから情報を取得しようとしています(2つの別々のクエリを使用)。1つのフィードは現在のストーリー「$newsfeed」をプルし、もう1つのフィードは履歴ストーリー「$historyfeed」をプルします。両方のテーブルは分離したままにする必要があります。これらのクエリを、設定された数または行に対してランダムな順序で配置しようとしています。たとえば、履歴とニュースをランダムに選択して、5つのストーリーをリストしたいとします。

順序は次のようになります:履歴、ニュース、履歴、履歴、履歴

次の訪問では、ニュース、ニュース、新規、履歴、ニュースが生成される可能性があります

この部分はうまく機能しているようです...

ただし、クエリの次の行に移動できませんでした。したがって、クエリの次の行に移動する代わりに、まったく同じニュース記事が5つ生成されます。以下のサンプルコードを参照してください。

//DB connection established earlier
$newsfeed = mysql_query("SELECT * FROM newsfeed WHERE story_type='business'"); //News Story Query
$row_newsfeed = mysql_fetch_assoc($newsfeed);

$historyfeed = mysql_query("SELECT * FROM newsfeed WHERE story_type='business'"); //History Story Query
$row_historyfeed = mysql_fetch_assoc($historyfeed);

$storycount = 0;
while ($storycount < 5) {

$storytype = rand(1,2); //randomly select next story type

switch ($storytype){
    case: "1" //if next story is a new story
            storybubble($row_newsfeed); //function to echo newsfeed content
            $storycount++;
    break;
    case: "2" //if next story is a history story
            storybubble($row_historyfeed); //function to echo historyfeed content
            $storycount++;
    break;
    default:
            echo "Error";
} //switch statement
} //story count while statement
4

2 に答える 2

1

上部に変数を作成し、ストーリーを and にロードし$historyfeedます$newsfeed。ただし、ループ内で同じ変数を使用し続けます。これは少しうまくいくはずです:

case: "1" //if next story is a new story
        $row_newsfeed = mysql_fetch_assoc($newsfeed);
        storybubble($row_newsfeed); //function to echo newsfeed content
        $storycount++;
break;
case: "2" //if next story is a history story
        $row_historyfeed = mysql_fetch_assoc($historyfeed);
        storybubble($row_historyfeed); //function to echo historyfeed content
        $storycount++;

コードの開始時ではなく、必要なときに変数を設定しています。

于 2012-09-21T17:01:19.930 に答える
1

mysql_fetch_assoc() returns one row of the result.

If you want to return the next row you need to call mysql_fetch_assoc() again.

So you could change your calls to storybubble to:

storybubble(mysql_fetch_assoc($row_newsfeed));

However, you'll probably be better off to build an array of the rows and then pull from that.

$newsfeed = array();
$historyfeed = array();
while($row = mysql_fetch_assoc($newsfeed)) {
 $newsfeed[] = $row;
}

while($row = mysql_fetch_assoc($historyfeed)) {
 $historyfeed[] = $row;
}

...

switch($storytype) {
 case 1:
storybubble(array_shift($newsfeed));
break;
}

...
于 2012-09-21T17:07:02.873 に答える