2012-09-21 50 views
1

我試圖將「新聞饋送」合併到我的網站中,從兩個不同的表中提取信息(使用兩個單獨的查詢)。一個飼料拉當前故事「$新聞源」,另一個拉歷史故事「$歷史飼料」。 兩張桌子需要保持分開。我試圖將這些查詢以隨機順序放置一組或多行。例如,我想要列出5個故事,隨機選擇歷史和新聞。在兩個分開的表查詢之間切換PHP MySQL

的順序可能是:歷史,新聞,歷史,歷史,歷史

下訪可能會產生:新聞,新聞,新,歷史,新聞

這部分似乎工作罰款...

但是,我一直無法移動到查詢中的下一行。因此,生成了五份完全相同的新聞報道,而不是移動到查詢的下一行。請參見下面的示例代碼:

//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 

回答

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++; 

它是在需要時填充變量,而不是在代碼的開始處。

+0

感謝您的幫助。你的建議已經完成了! –

+0

@RichStreets - 我建議你看看芙蓉的答案;這是相同的邏輯,但我認爲它比我的解決方案 – andrewsi

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; 
} 

... 
+0

+1更優雅,適合非常整潔的解決方案 – andrewsi