首页 > 解决方案 > 我想在不同的页面上显示随机图像,而不需要从 php 中的数据库中重复

问题描述

看法:

<?php
$bnrDone = createDynamicBanner();
if (count($bnrDone) === 1):
?>
    <div class="ads-dv under_search">
        <div class="container">
            <div class="row">
                <div class="inner_ads_sys">
                    <a href="<?php echo $bnrDone[0]['ad_url']?>">
                        <img  src="<?php echo base_url('assets/images/advertisements/'.$bnrDone[0]['ad_dp']); ?>" class="img-fluid" alt="<?php echo $bnrDone[0]['ad_title']?>">
                    </a>
                </div>
            </div>
        </div>
    </div>
<?php 
endif; 
?>

帮手:

function createDynamicBanner()
{
    $CI = & get_instance();
    return $CI->db->distinct()
                  ->select('ad_id,ad_title,ad_url,ad_status,ad_dp')
                  ->order_by('rand()')
                  ->limit(1)
                  ->from('advertisements')
                  ->where('ad_status',1)
                  ->get()
                  ->result_array();
    //echo $CI->db->last_query();
}

现在令人惊讶的是,即使我排除了 betwwen 子句部分它仍然返回 1,我的愚蠢顽固的方法(或者我是)对于任何值都返回 1

标签: phpcodeigniter

解决方案


想法 1)你可以使用单例模式创建一个列出所有图像的队列对象吗?然后您对队列的调用将检索下一个图像。

想法 2)或者,您可以通过创建第二张图像名称表来保存数据库中的状态,该表每晚都会重新生成。该表可以有两列,[imageName] 和 [usedBy],并且您可以获得下一张 usedBy 为 false 的图像(null,0,等等)。您的图像提取方法必须将图像标记为页面的唯一 ID 使用的图像作为提取的一部分,当然,为了安全起见,可能作为 SQL 事务。

很大程度上取决于您预期的流量。


推荐阅读