当我从数据库随机调用图像时,它会加载x次,但我只想显示一次。
$random = array_rand(Database::query('SELECT * FROM ADVERTISEMENTS' ));
$adv_sql = "SELECT * FROM `ADVERTISEMENTS` WHERE `id` = $random ";
$advResult = Database::single($adv_sql, $random['id']);
$advExplode = explode('/', $advResult['upload']);
$advLocation = 'url/location' . end($advExplode);
答案 0 :(得分:0)
我无法理解你的抽象。
您的第二个查询的条件为id = $random
,但您在single()
方法中绑定了参数:$adv_sql, $random['id']
。
我们不知道你的方法有效,你应该向我们展示它们的实现。
无论如何,这不是一个更好的查询吗?
SELECT * FROM `ADVERTISEMENTS` ORDER BY RAND() LIMIT 1
如果您想收到所有
,或者没有LIMIT
如果您不想在第二个请求中显示已加载的图像,则需要根据需要将目前显示的图像记录到数据库,cookie或会话中。
或者,将显示的图像绑定到实例。
这是我到目前为止的测试:
class Images {
private $_imagesShown = array("''");
private function getShownImages() {
return implode(',', $this->_imagesShown);
}
private function setShownImage($row) {
$this->_imagesShown[] = $row['id'];
}
public function getImages() {
$query = "SELECT id, image FROM images WHERE id NOT IN ({$this->getShownImages()})";
$result = mysqli_query($query);
$row = mysqli_fetch_assoc($result);
$this->setShownImage($row);
return $row;
}
}
$img = new Images();
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
输出:
array (size=2)
'id' => string '1' (length=1)
'img' => string '0.jpg' (length=1)
array (size=2)
'id' => string '2' (length=1)
'img' => string '1.jpg' (length=1)
array (size=2)
'id' => string '3' (length=1)
'img' => string '2.jpg' (length=1)
array (size=2)
'id' => string '4' (length=1)
'img' => string '3.jpg' (length=1)
array (size=2)
'id' => string '5' (length=1)
'img' => string '4.jpg' (length=1)
array (size=2)
'id' => string '6' (length=1)
'img' => string '12.jpg' (length=1)
array (size=2)
'id' => string '7' (length=1)
'img' => string '55.jpg' (length=1)
所以getImages()
的每次调用都会返回一个未显示的图片