1

我正在尝试将“新闻提要”合并到我的网站中,从两个不同的表中提取信息(使用两个单独的查询)。一个提要提取当前故事“$newsfeed”,另一个提取历史故事“$historyfeed”。两个表需要保持分开。我试图将这些查询以随机顺序放置一组或几行。例如,我想列出 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

您在顶部创建变量,并将故事加载到$historyfeedand $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() 返回一行结果。

如果要返回下一行,则需要再次调用 mysql_fetch_assoc()。

因此,您可以将对 storybubble 的调用更改为:

storybubble(mysql_fetch_assoc($row_newsfeed));

但是,您最好构建一个行数组,然后从中提取。

$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 回答