繁体   English   中英

如何使用PHP显示随机图像而不重复数据库(MySql)

[英]How to display the random images without repetition from database(MySql) using php

我在php中有一个程序,可以不重复显示随机图像,我能够将图像存储在数据库中,但是我不知道这样做,任何人都可以帮助我。

谢谢,

保存哪些已显示在$ _SESSION中,然后构造查询以选择其中之一?

例如

session_start();
$result = mysql_query("Select * from images WHERE id NOT IN (".implode(',',$_SESSION['used']).") LIMIT 1;");
$result = mysql_fetch_array($result);
$_SESSION['used'][] = $result['id'];
// show image
SELECT * FROM `images` ORDER BY RAND() LIMIT 1;

Robus接近了,但是如何获得第一张图片呢? 当$ _SESSION ['used']未设置/为空时,该代码将出错。

rand()可能很慢,但是对于较小的数据库来说绝对是有效的选择。

假设数据库中的ID是连续的且没有间隙,则可以拉出最后插入的ID,并将其用作rand(1,max)的最大值以预先生成随机图像(不使用rand())。

Shruti,当您说要将图像存储在数据库中时,它们实际上是在数据库中还是仅是图像的记录? 如果您碰巧将图像放在一个目录中(不建议这样做,但这是另一篇文章),则可以对目录运行scandir(),然后对array_rand()进行操作以获取随机图像(数据库开销为零),但要小心有关使单个目录过载文件的信息,请注意在提取随机条目时跳过“。”和“ ..”)

function get_items_by_params($quant,$mode="props",$prop="",$pv="")
{
    $DB = new MySQLTable;
    $DB->TblName = 'shop_goods';
    $where['good_switch']['='] = 'on';
    $cr = $DB->Select('COUNT(*)', $where);
    if($cr !== false)
    {
        if(mysql_num_rows($cr)>0)
        {
            $row_count = mysql_result($cr,0);
            if($row_count>$quant)
            {
                $rand_vals = array();
                for($i = 0; $i<$quant; $i++)
                {
                   $rv = mt_rand(0,$cr-1);
                   $try = 0;
                   while(in_array($rv,$rand_vals))
                   {
                       $rv = mt_rand(1,$row_count);
                       $try++;
                       if($try>$quant+1000)
                       {
                           break;
                       }
                   }
                   $rand_vals[] = $rv;
                }
            } else {
                return false;
            }

            $query = array();
            foreach($rand_vals as $random_row)
            {
              $query[] = '(SELECT `good_id`,`good_img`,`good_name`,`good_props` FROM `shop_goods` WHERE `good_switch` = "on" LIMIT '.$random_row.', 1)';
            }
            $query = implode(' UNION ', $query);
            $res = $DB->SimpleQuery($query);
            $out = array();
            if($res !== false)
            {
                while($row = mysql_fetch_array($res))
                {
                    $out[] = array($row['good_id'],$row['good_img']);
                }
                return $out;
            }
        }
    }
    return false;
}

该函数使用我自己的mysql-work类。 但是有一些疑问:
$cr = $DB->Select('COUNT(*)', $where);//SELECT COUNT(*) FROM shop_goods WHERE good_switch = 'on'
$res = $DB->SimpleQuery($query); // like simple mysql_query() $res = $DB->SimpleQuery($query); // like simple mysql_query() ,关键是要通过PHP生成随机值,以避免MySQL随机生成
函数返回具有ID /图像对的数组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM