2010-06-26 7 views

Répondre

3

Enregistrer ceux qui ont été présentées dans _SESSION $ et juste construire la requête pour sélectionner celui qui ne figure pas parmi eux?

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

j'ai essayé le code ci-dessus, mais il didn ne fonctionne pas pour moi, voici mon code

Shruti

+0

je reçois cette erreur Avertissement: mysql_fetch_array() 1 paramètre attend à être ressource, booléenne donnée dans C: \ wamp \ www \ Exemples \ display.php on line 11 – Shruti

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

La commande par rand() est SLOOOOOOOOOW Ne doit pas être utilisée. – Robus

0

Robus était proche, mais qu'en obtenant cette première image? Ce code produirait une erreur lorsque $ _SESSION ['used'] n'est pas défini/vide. Rand() peut être lent, mais certainement une option valide pour une base de données plus petite. En supposant que les ID dans la base de données sont séquentiels sans espaces, le dernier ID inséré pourrait être tiré et utilisé comme le maximum d'un rand (1, max) pour produire une image aléatoire avant (sans utiliser rand()).

Shruti, quand vous dites que vous stockez les images dans la base de données, sont-elles réellement dans la base de données, ou juste un enregistrement de l'image? Si vous avez les images dans un seul répertoire (pas vraiment conseillé, mais c'est pour un autre post), vous pouvez exécuter scandir() sur le répertoire, puis array_rand() pour obtenir une image aléatoire (zéro frais de base de données, mais attention d'avoir un seul répertoire surchargé avec des fichiers et faire attention de sauter. »et « .. » en tirant l'entrée aléatoire)

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; 
} 

Cette fonction utilise ma propre classe mysql travail. Mais il y a des requêtes:
$cr = $DB->Select('COUNT(*)', $where);//SELECT COUNT(*) FROM shop_goods WHERE good_switch = 'on'
$res = $DB->SimpleQuery($query); // like simple mysql_query() Le point est de générer des valeurs aléatoires par PHP pour éviter la génération aléatoire par MySQL
Fonction retourne un tableau avec id paires/images

Questions connexes