Php 查询以显示数据库中的四个随机数据

Php 查询以显示数据库中的四个随机数据,php,mysql,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) {

这是我的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次。但它必须显示四种不同的输出。所以,请告诉我虫子在哪里。。。我应该如何显示四种不同的随机输出

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

尝试这样构造while循环

while(($rows=mysql_fetch_array($query_run)) !== false)
使用
orderbyrand()
不是最佳做法,因为必须为每一行生成随机值。更好的方法是在PHP中随机生成主键(例如ID),然后根据它们进行选择

$random_id = rand(1,4);
$query="SELECT * FROM `banner_ad` WHERE id = $random_id";
将只选择一个随机行。类似的方法是使用语句中的
选择多行


您可以找到更多信息。

您的第一个查询很好,但while是错误的:

看看你在这里做了什么:

$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>";
}
这将导致每次检查while条件时,
myslq\u fetch\u array
返回新行。如果所有4行都返回,
$rows
将为false,循环将停止

待完成: 在第二个示例中,您在同一行上迭代了4次,只通过调用
myslq\u fetch\u array
获取了一次

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

$i=4;
while ($i>0){
    $rows = mysql_fetch_array(...);
    $i--;
}
但是,您应该更喜欢第一个解决方案,因为这样您就不需要注意结果计数是否与迭代器变量匹配

sidenode:不带“s”就称它为
$row
,因为您总是只返回一行。

$query\u run=mysql\u query($query);
$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...
        }
    }
}
如果(!$query\u运行) { echo“查询未运行”。;//字体标记已过时 } 其他的 { 如果(mysql\u num\u行($query\u run)>0) { while($row=mysql\u fetch\u assoc($query\u run)) { echo$rows['banner_no']; echo$rows['banner_name']; //更多。。。 } } }
$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...
        }
    }
}