我有一个PHP程序应该显示随机图像而不重复,我能够将图像存储在数据库中,但我不知道这样做可以任何人帮助我。
谢谢,
答案 0 :(得分:3)
保存哪些已在$ _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
答案 1 :(得分:0)
SELECT * FROM `images` ORDER BY RAND() LIMIT 1;
答案 2 :(得分:0)
Robus很接近,但获得第一张图片怎么样?
rand()可能很慢,但绝对是较小数据库的有效选项。
假设数据库中的ID是顺序无间隙的,则可以拉出最后插入的ID并将其用作rand(1,max)的最大值,以预先生成随机图像(不使用rand())。 / p>
Shruti,当你说你将图像存储在数据库中时,它们实际上是在数据库中,还是仅仅是图像的记录?如果您碰巧将图像放在一个目录中(不是真的可取,但那是另一个帖子),您可以对目录运行scandir(),然后使用array_rand()来获取随机图像(零数据库开销,但要小心)关于让一个目录重载文件,并在拉随机条目时小心跳过'。'和'..'
答案 3 :(得分:0)
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()
重点是通过PHP生成随机值,以避免MySQL随机生成
函数返回具有对id / image