2010-06-26 113 views

回答

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爲我工作,這裏是我的代碼 <?php session_start(); $ conn = mysql_connect(「localhost」,「root」,「」); mysql_select_db(「dbase_mgb」,$ conn); $ result = mysql_query(「SELECT * from image WHERE img_id NOT IN(」.implode(',',$ _ SESSION ['used'])。「)LIMIT 1」); $ _SESSION ['used'] [] = $ result ['img_id']; $ imagepath ='http:// localhost/images /'; ($ row = mysql_fetch_array($ result)) \t { $ img = $ imagepath。$ row ['img_name']; } >

Shruti 2010-06-28 04:01:42

+0

我得到這個誤差 警告:mysql_fetch_array()預計參數1是資源,在布爾C中給出:\瓦帕\ WWW \實施例\ display.php on line 11 – Shruti 2010-06-28 04:33:35

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

rand()的順序是SLOOOOOOOOOW。不應該被使用。 – Robus 2010-06-26 10:58:32

0

Robus接近,但有關如何獲得第一個圖像是什麼?當$ _SESSION ['used']未設置/空時,該代碼會出錯。

rand()可能會很慢,但絕對是小型數據庫的有效選項。

假設數據庫中的ID是連續的,沒有間隙,最後一個插入的ID可以作爲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; 
} 

此功能使用自己的數據庫工作類。但是也有查詢:
$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陣列/圖像