我正在尝试将“新闻Feed”合并到我的网站中,从两个不同的表中提取信息(使用两个单独的查询)。一个Feed提取当前故事“$ 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
答案 0 :(得分:1)
您可以在顶部创建变量,并将故事加载到$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++;
它在需要时填充变量,而不是代码的开头。
答案 1 :(得分: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;
}
...