查询从数据库中显示四个随机数据

时间:2012-11-30 10:45:29

标签: php mysql

这是我用于显示数据库中数据的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次。但它必须显示四种不同的输出。那么,请告诉我哪里有错误...我怎么想显示四种不同的随机输出。

任何帮助将不胜感激 提前致谢

4 个答案:

答案 0 :(得分: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始终会被设置。 你需要的是:

while($rows=mysql_fetch_array($query_run))

每次检查while条件时,这将导致myslq_fetch_array返回一个新行。如果返回所有4行,$rows将为false并且循环停止。

要完成: 在第二个示例中,您在SAME行上完全迭代了4次,您只需通过调用myslq_fetch_array获取一次。

可能的解决方案是在while循环中再次获取行:

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

但是你应该更喜欢第一个解决方案,因为那样你就不需要注意结果计数与你的迭代器变量匹配了。

sidenode:在没有's'的情况下将其称为$row,因为你总是只能获得一行。

答案 1 :(得分:0)

尝试构建while循环

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

答案 2 :(得分:0)

使用ORDER BY RAND()不是最佳做法,因为必须为每一行生成随机值。更好的方法是在PHP中随机生成主键(例如ID),然后根据它们进行选择。

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

将精确选择一个随机行。类似的是使用IN语句选择多行。

您可以找到更多信息here

答案 3 :(得分: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...
        }
    }
}