2012-11-30 151 views
0

這是我的php代碼,用於顯示數據庫中的數據。我試圖顯示錶中的隨機數據。查詢顯示來自數據庫的四個隨機數據

<?php 
include('connection.php'); 
$query="SELECT * FROM `banner_ad` ORDER BY RAND() LIMIT 4"; 
if($query_run=mysql_query($query)) 
{ 
    $i=4; 
    $rows=mysql_fetch_array($query_run); 
    while($rows) 
    { 
     echo $rows['banner_no']; 
     echo $rows['banner_name']; 
     echo "<a href=\"".$rows['Banner_website_url']. "\">"; 
     echo "<img src=\"".$rows['banner_image_url']."\" width=\"100px\" height=\"100px\">"; 
     echo"</a>"; 
    } 
} else { 
    echo'<font color="red"> Query does not run. </font>'; 
} 
?> 

但這段代碼的問題是:

它顯示什麼。但每當我試圖做一個小的修改在上面的代碼,如:

<?php 
include('connection.php'); 
$query="SELECT * FROM `banner_ad` ORDER BY RAND() LIMIT 4"; 
if($query_run=mysql_query($query)) 
{ 
    $i=4; 
    $rows=mysql_fetch_array($query_run); 
    while($rows && $i<4) 
    { 
     echo $rows['banner_no']; 
     echo $rows['banner_name']; 
     echo "<a href=\"".$rows['Banner_website_url']. "\">"; 
     echo "<img src=\"".$rows['banner_image_url']."\" width=\"100px\" height=\"100px\">"; 
     echo"</a>"; 
     $i=$i-1; 
    } 
} else { 
    echo'<font color="red"> Query does not run. </font>'; 
} 
?> 

它顯示相同的單路輸出的4倍。但它必須顯示四個不同的輸出。所以,請告訴我錯誤在哪裏......我想如何顯示四種不同的隨機輸出。

任何幫助將提前意識到 感謝

回答

1

第一個查詢是好的,但同時是錯誤的:

看看你在這裏做什麼:

$rows=mysql_fetch_array($query_run); 
while($rows) 
{ 
    echo $rows['banner_no']; 
    echo $rows['banner_name']; 
    echo "<a href=\"".$rows['Banner_website_url']. "\">"; 
    echo "<img src=\"".$rows['banner_image_url']."\" width=\"100px\" height=\"100px\">"; 
    echo"</a>"; 
} 

,這將在「無限循環」的原因$rows年底將始終設置。 你需要的是:

這將導致myslq_fetch_array返回一個新的生產線,每次while條件檢查。如果所有4行都返回,則$rows將爲false,並且循環停止。

要完成: 在第二個示例中,您正在同一行上重複4次,您只需調用myslq_fetch_array即可獲取一次。

一個可能的解決方案,這將是在while循環再次讀取該行:

$i=4; 
while ($i>0){ 
    $rows = mysql_fetch_array(...); 
    $i--; 
} 

然而,你應該更喜歡第一個解決方案,因爲這樣你不需要照顧的結果計數比賽你的迭代器變量。

sidenode:因爲你總是隻收到一行,因此請撥打$row而不是's'。

0

嘗試while循環構造,像這樣

while(($rows=mysql_fetch_array($query_run)) !== false) 
0

使用ORDER BY RAND()是不是最好的做法,因爲必須爲每個單行生成隨機值。更好的方法是在PHP中隨機生成主鍵(例如ID),然後根據它們進行選擇。

$random_id = rand(1,4); 
$query="SELECT * FROM `banner_ad` WHERE id = $random_id"; 

只會選擇一個隨機行。類似的,應該使用IN聲明選擇多行。

更多信息你可以找到here

0
$query_run=mysql_query($query); 
if(!$query_run) 
{ 
    echo'<span style="color:red">Query did not run.</span>';//font tag is ancient 
} 
else 
{ 
    if(mysql_num_rows($query_run) > 0) 
    { 
     while($row = mysql_fetch_assoc($query_run)) 
     { 
      echo $rows['banner_no']; 
      echo $rows['banner_name']; 
      // more... 
     } 
    } 
}