[MySQL] Selection d'un enregistrement aléatoire [Résolu]

Selection d'un enregistrement aléatoire [Résolu] [MySQL] - PHP - Programmation

Marsh Posté le 03-08-2005 à 10:03:52    

Bonjour à tous!
 
Voici mon problème, je voudrais faire une selection aléatoire dans ma base de produits pour les afficher dans deux cadres.
 
Pour cela je me suis créé un cadre_small.php que j'include dans ma page où il doit s'afficher.
La requête que j'utilise actuellement est la suivante :
 
$query = mysql_query("SELECT * FROM produits ORDER BY rand() LIMIT ".$t); ou $t = 1;
 
Pour afficher les informations j'utilise une boucle :
 
while ( $i = mysql_fetch_row($query) )  
 
  {        
         echo $i[1]; // ainsi de suite pour tous mes enregistrements
         }

 
Ceci marche bien, mais le problème est que je veut afficher deux cadres produits à gauche de ma page. Je répète donc deux fois mon include :
 
include("build/cadre_small.php" );    
include("build/cadre_small.php" );

 
Avec cette technique il arrive que les deux enregistrements soient les même, par conséquent c'est deux fois le même produits qui s'affiche.
 
Pour éviter ce problème, et après avoir cherché sur le net, je pense qu'il faudrais initialiser un générateur aléatoire. Voici ce que j'ai trouvé :
 
1) SELECT COUNT(*) FROM la_table as $count
2) srand((double)microtime()*1000000);
3) $rand = rand(0,$count - 1);
4) SELECT * FROM la_table LIMIT $rand,1
 
Ca c'est la théorie, mais je n'arrive pas à le faire avec ma page en php.
Comment pourais-je faire pour y intégrer dans mon script en gardant ma boucle while ? (sauf si il y a une technique plus simple ou plus efficace)
 
Merci d'avance ...


Message édité par mc_cut_killer le 03-08-2005 à 11:45:29
Reply

Marsh Posté le 03-08-2005 à 10:03:52   

Reply

Marsh Posté le 03-08-2005 à 10:31:21    

Pourquoi pas LIMITer à 2, tu aura donc deux produits toujours différents, où $i[0] est le premier et $i[1] le second...
Ainsi tu n'as pas besoin de faire deux query à la bdd.
 
Je ne sais pas si tes cadres sont des iframes ou pas, mais si c'est le cas tu peux lui passer l'id du produit dans le src de l'iframe par exemple src="cadre_small.php?display=22"


---------------
www.renderfarm.online
Reply

Marsh Posté le 03-08-2005 à 10:38:49    

En fait mes cadres sont des tableau ou s'intégre le resultat.
 
echo $i[1] .... echo $i[n] est la technique que j'ai trouvé pour afficher les valeurs de mon enregistrement produit selectionné (ref / prix / image ...)
 
La requette que j'ai décrit s'effectue sur la page cadre_small.php et selectione bien un enregistrement aléatoire.
Le problème est que j'inclue deux fois cette page php pour avoir deux tableau. Par conséquent il arrvie que cette selection aléatoire retourne le même resultat deux fois.
 
C'est pourquoi j'pense qu'il faudrait que j'arrive à initialisé ce générateur aléatoire. De ce fait je pense que je n'aurais plus deux fois le même resultat.
 
J'ai pu trouvé la seconde requête, mais vu que je début dans l'utilisation de base de donnée sous php je ne sais pas comment l'exécuter dans mon script.
 
Ce que je vourdrais c'est que quelqu'un me dise comment y parvenir ou me propose une solution équivalente...

Reply

Marsh Posté le 03-08-2005 à 10:45:58    

$t = 2 ?

Reply

Marsh Posté le 03-08-2005 à 10:51:57    

J'ai essayé, ca marche pas ... la page est toute destroy !
 
En fait vue que j'inclue deux fois la page cadre_small.php il y a deux tableau.  
Mais la requêtte se situe dans cette page, pour elle il y a donc qu'un tableau ...

Reply

Marsh Posté le 03-08-2005 à 10:56:34    

il faut mieux que tu fasses ta requetes qu'une seule fois, par exemple tu mets une fonction dans le include, et tu appelles deux fois cette fonction avec les deux valeur différentes, non ?

Reply

Marsh Posté le 03-08-2005 à 11:05:55    

J'vais essayé ... mais j'voi pas trop comment faire pour récupérer les valeurs par la suite et les afficher dans deux tableau

Reply

Marsh Posté le 03-08-2005 à 11:14:07    

En fait voici ma page cadre_small.php :
 
 
<?php  
/* nombre de tableau produits partie Gauche */
$t = 1;
   
/* Chargement paramètres de la base de donnée */  
@session_start();
include("mon fichier bdd" );
   
 
/* fonction SQL chargement produits */            
   
$connection = mysql_connect($host, $user, $password)
or die ("mon message" );
 
$db = mysql_select_db($database, $connection)
or die ("mon message 2" );
 
/* requête générale pour afficher le produit */
$query = mysql_query("SELECT * FROM produits ORDER BY rand() LIMIT ".$t);
     
while ( $i = mysql_fetch_row($query) )  
 
{        
 
/* construction du tableau produit */
 
echo '<table id="Petit_Cadre" width="300" height="251" border="0" cellpadding="0" cellspacing="0">
<tr><td width="300" height="14" colspan="7"><img src="img/espaceur.gif" width="300" height="14" alt=""></td></tr>
<tr><td width="11" height="236" rowspan="7"><img src="img/espaceur.gif" width="11" height="236" alt=""></td>
<td colspan="5" width="282" height="28" background="img/cadre_01.gif" class="txt">
&nbsp;&nbsp;';
     
echo $i[2];
 
echo '</td>
<td width="7" height="236" rowspan="7"><img src="img/espaceur.gif" width="7" height="236" alt=""></td></tr>
<tr><td colspan="5" width="282" height="24" background="img/cadre_02.gif" class="txt">';
 
echo '<div align="center">'; echo $i[1]; echo '</div>';
 
echo '</td></tr>
<tr><td width="4" height="132" background="img/cadre_03.gif"></td>
<td colspan="3" valign="top" bgcolor="#F9F9F9" class="txt">
<br>';
   
echo '<div align="center"><img src="produits/'; echo $i[3]; echo'" width="165" height="45"></div>
<br>';
   
echo $i[4];
   
}  
   
echo '</td>
<td width="8" height="132" background="img/cadre_04.gif"></td></tr>
<tr><td colspan="5"><img src="img/cadre_05.gif" width="282" height="5" alt=""></td></tr>
<tr><td colspan="2"><img src="img/cadre_06.gif" width="168" height="19" alt=""></td>
<td><a href="index.php?cat=produits" target="_parent"><img src="img/cadre_07.gif" width="88" height="19" border="0" alt="Plus de détails"></a></td>
<td colspan="2"><img src="img/cadre_08.gif" width="26" height="19" alt=""></td></tr>
<tr><td colspan="5"><img src="img/cadre_09.gif" width="282" height="19" alt=""></td></tr>
<tr><td width="282" height="9" colspan="5"><img src="img/espaceur.gif" width="282" height="9" alt=""></td></tr>
<tr><td><img src="img/espaceur.gif" width="11" height="1" alt=""></td><td><img src="img/espaceur.gif" width="4" height="1" alt=""></td>
<td><img src="img/espaceur.gif" width="164" height="1" alt=""></td><td><img src="img/espaceur.gif" width="88" height="1" alt=""></td>
<td><img src="img/espaceur.gif" width="18" height="1" alt=""></td><td><img src="img/espaceur.gif" width="8" height="1" alt=""></td>
<td><img src="img/espaceur.gif" width="7" height="1" alt=""></td></tr>
</table>';
 
?>

Reply

Marsh Posté le 03-08-2005 à 11:19:56    

bon, dans ton fichier qui appelle celui-ci, mets un unique session_start, une unique connexion à la base de donnée... et ta boucle while qui va faire un include de cadre_small.php par exemple ...
 
ensuite tu ne gardes que la génération du tableau dans cadre_small.php ...
 
EDIT: à préférer la solution ci-dessous peut-être, moi aussi je préfère les fonctions ...


Message édité par mcjoedassin le 03-08-2005 à 11:23:34
Reply

Marsh Posté le 03-08-2005 à 11:21:49    

Par ex, on passe l'array à la fonction:
 

Code :
  1. $query = mysql_query("SELECT * FROM produits ORDER BY rand() LIMIT 2" );
  2. while ($i = mysql_fetch_row($query)) { petit_cadre($i); }


 
Puis la fonction qui va créer le tableau:
 

Code :
  1. <?
  2. function petit_cadre($i) {
  3. ?>
  4. <table id="Petit_Cadre" width="300" height="251" border="0" cellpadding="0" cellspacing="0">
  5.   <tr><td width="300" height="14" colspan="7"><img src="img/espaceur.gif" width="300" height="14" alt=""></td></tr>
  6.   <tr>
  7.     <td width="11" height="236" rowspan="7"><img src="img/espaceur.gif" width="11" height="236" alt=""></td>
  8.     <td colspan="5" width="282" height="28" background="img/cadre_01.gif" class="txt">&nbsp;&nbsp;<?=$i[2] ?></td>
  9.     <td width="7" height="236" rowspan="7"><img src="img/espaceur.gif" width="7" height="236" alt=""></td>
  10.   </tr>
  11.   <tr>
  12.     <td colspan="5" width="282" height="24" background="img/cadre_02.gif" class="txt"><div align="center"><?=$i[1] ?></div></td>
  13.   </tr>
  14.   <tr>
  15.     <td width="4" height="132" background="img/cadre_03.gif"></td>
  16.     <td colspan="3" valign="top" bgcolor="#F9F9F9" class="txt">
  17.       <br><div align="center"><img src="produits/<?=$i[3] ?>" width="165" height="45"></div><br>
  18.       <?=$i[4] ?>
  19.     </td>
  20.     <td width="8" height="132" background="img/cadre_04.gif"></td>
  21.   </tr>
  22.   <tr><td colspan="5"><img src="img/cadre_05.gif" width="282" height="5" alt=""></td></tr>
  23.   <tr>
  24.     <td colspan="2"><img src="img/cadre_06.gif" width="168" height="19" alt=""></td>
  25.     <td><a href="index.php?cat=produits" target="_parent"><img src="img/cadre_07.gif" width="88" height="19" border="0" alt="Plus de détails"></a></td>
  26.     <td colspan="2"><img src="img/cadre_08.gif" width="26" height="19" alt=""></td>
  27.   </tr>
  28.   <tr><td colspan="5"><img src="img/cadre_09.gif" width="282" height="19" alt=""></td></tr>
  29.   <tr><td width="282" height="9" colspan="5"><img src="img/espaceur.gif" width="282" height="9" alt=""></td></tr>
  30.   <tr>
  31.     <td><img src="img/espaceur.gif" width="11" height="1" alt=""></td><td><img src="img/espaceur.gif" width="4" height="1" alt=""></td>
  32.     <td><img src="img/espaceur.gif" width="164" height="1" alt=""></td><td><img src="img/espaceur.gif" width="88" height="1" alt=""></td>
  33.     <td><img src="img/espaceur.gif" width="18" height="1" alt=""></td><td><img src="img/espaceur.gif" width="8" height="1" alt=""></td>
  34.     <td><img src="img/espaceur.gif" width="7" height="1" alt=""></td>
  35.   </tr>
  36. </table>
  37. <?
  38. }
  39. ?>



---------------
www.renderfarm.online
Reply

Marsh Posté le 03-08-2005 à 11:21:49   

Reply

Marsh Posté le 03-08-2005 à 11:23:54    

vous avez pas plus pourri comme code HTML ?
 
><img src="img/espaceur.gif"> <==== mon dieuuuuuuuuuuuuuuu

Reply

Marsh Posté le 03-08-2005 à 11:25:53    

Dans ce cas les resultats obtenu sont toujours les mêmes ...
 
J'essaye la deuxième technique ...
 
Pour le code html j'ai eu ce resultat avec photoshop et je sais pas comment enlever ces modits espaceur.gif encore ...


Message édité par mc_cut_killer le 03-08-2005 à 11:27:11
Reply

Marsh Posté le 03-08-2005 à 11:27:02    

ben y a ça aussi qui me gène <?=$i[2] ?>
écriture à remplacer par <?php echo $i[2]; ?> pour des raisons de compatibilité ...

Reply

Marsh Posté le 03-08-2005 à 11:31:48    

mc_cut_killer : c'est po bien les multis lol
et puis heu tu fais tout en CSS

Reply

Marsh Posté le 03-08-2005 à 11:33:22    

Merci mcjoedassi la seconde technique marche nickel avec la fonction, les enregistrements sont toujours différents !!!
 
Reste plus qu'à ce que je comprenne bien ce procédé ...
 
Encore merci :)

Reply

Marsh Posté le 03-08-2005 à 11:35:04    

A l'origine je suis suis Unix et j'utilise un bloc note pour mes pages Web.
 
Récemment j'ai "apris" à utiliser PhotoShop, je trouve que les interfaces sont super jolies mais j'ai toujours ce problème d'"espaceur.gif" qui se retrouve dans mes pages et se répète toujours en fin de page ...

Reply

Marsh Posté le 03-08-2005 à 11:47:26    

tu peux utiliser un logiciel plus performant, comme Scite par exemple, plutôt que le bloc note ... peut-être même que tu pourras voir les balises que tu n'aspas fermé comme les <img .... />

Reply

Marsh Posté le 03-08-2005 à 11:53:07    

Merci pour le lien ... actuellement je teste l'éditeur jEdit.
Je viens de télécharger le tiens et je vais voir...
 
Maintenant je vais essayer de gèrer ces espaceur.gif à répétition.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed