2010-06-26 2 views
0

У меня есть программа на php, которая должна отображать случайные изображения без повторения, я смог хранить изображения в базе данных, но у меня нет любая идея сделать это может помочь мне с этим.Как отображать случайные изображения без повторения из базы данных (MySql) с помощью php

Спасибо,

ответ

3

Сохранить те, которые были показаны в $ _SESSION и просто построить запрос, чтобы выбрать тот, который не находится среди них?

ex.

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 
+0

Я попытался выше приведенный код, но он Бесполезный 't работа для меня, вот мой код

Shruti

+0

я получаю эту ошибку Предупреждение: mysql_fetch_array() ожидает параметр 1, чтобы быть ресурсом, логический дан в C: \ WAMP \ WWW \ Примеры \ display.php в строке 11 – Shruti

0
SELECT * FROM `images` ORDER BY RAND() LIMIT 1; 
+0

Заказ от rand() - SLOOOOOOOOOW. Не должен использоваться никогда. – Robus

0

Robus был близок, но как получить, что первое изображение? Этот код будет ошибочным, если $ _SESSION ['used'] не установлен/пуст.

rand() может быть медленным, но определенно допустимым вариантом для небольшой базы данных.

Предполагая, что идентификаторы в базе данных являются последовательными без зазоров, последний вставленный идентификатор можно вытащить и использовать как максимальное значение rand (1, max) для создания случайного изображения спереди (без использования rand()).

Shruti, когда вы говорите, что сохраняете изображения в базе данных, находятся ли они в базе данных или просто запись изображения? Если у вас есть изображения в одном каталоге (это не рекомендуется, но это для другого сообщения), вы можете запустить scandir() в каталоге, а затем array_rand(), чтобы получить случайное изображение (нулевые издержки базы данных, но будьте осторожны о наличии одного каталога перегружен с файлами и быть осторожными, чтобы пропустить «» и «..» при натяжении случайной записи)

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-работы. Но есть запросы:
$cr = $DB->Select('COUNT(*)', $where);//SELECT COUNT(*) FROM shop_goods WHERE good_switch = 'on'
$res = $DB->SimpleQuery($query); // like simple mysql_query() Дело в том, чтобы генерировать случайные значения от PHP, чтобы избежать случайного поколения по MySQL
Функция возвращает массив пар идентификатор/изображения

Смежные вопросы