Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
865 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1168526
mc_cut_kil​ler
Posté le 03-08-2005 à 10:03:52  profilanswer
 

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
mood
Publicité
Posté le 03-08-2005 à 10:03:52  profilanswer
 

n°1168560
dotfx
Posté le 03-08-2005 à 10:31:21  profilanswer
 

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
n°1168570
mc_cut_kil​ler
Posté le 03-08-2005 à 10:38:49  profilanswer
 

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...

n°1168577
mcjoedassi​n
Posté le 03-08-2005 à 10:45:58  profilanswer
 

$t = 2 ?

n°1168582
mc_cut_kil​ler
Posté le 03-08-2005 à 10:51:57  profilanswer
 

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 ...

n°1168587
mcjoedassi​n
Posté le 03-08-2005 à 10:56:34  profilanswer
 

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 ?

n°1168598
mc_cut_kil​ler
Posté le 03-08-2005 à 11:05:55  profilanswer
 

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

n°1168615
mc_cut_kil​ler
Posté le 03-08-2005 à 11:14:07  profilanswer
 

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>';
 
?>

n°1168631
mcjoedassi​n
Posté le 03-08-2005 à 11:19:56  profilanswer
 

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
n°1168634
dotfx
Posté le 03-08-2005 à 11:21:49  profilanswer
 

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
mood
Publicité
Posté le 03-08-2005 à 11:21:49  profilanswer
 

n°1168638
gatsusat
Posté le 03-08-2005 à 11:23:54  profilanswer
 

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

n°1168648
mc_cut_kil​ler
Posté le 03-08-2005 à 11:25:53  profilanswer
 

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
n°1168651
mcjoedassi​n
Posté le 03-08-2005 à 11:27:02  profilanswer
 

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

n°1168664
gatsusat
Posté le 03-08-2005 à 11:31:48  profilanswer
 

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

n°1168671
mc_cut_kil​ler
Posté le 03-08-2005 à 11:33:22  profilanswer
 

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 :)

n°1168675
mc_cut_kil​ler
Posté le 03-08-2005 à 11:35:04  profilanswer
 

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 ...

n°1168702
mcjoedassi​n
Posté le 03-08-2005 à 11:47:26  profilanswer
 

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 .... />

n°1168712
mc_cut_kil​ler
Posté le 03-08-2005 à 11:53:07  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
virer/reduire le fichier idbdata1 (MySQL)[RESOLU] : Bad interpreter
[formulaire] dynamique [résolu, merci bl@p] + imput personnaliséMySQL : requete suivant le mois en cours
[DIVERS] - php / mysql - le meilleur joueursSTL - multimap - ou le mystère de l'iterator perdu (non résolu)
Le limit en MySQL[JavaScript] Concaténer des chaines pour faire un nom de var. [Résolu]
[php] [RESOLU] probleme de tableau[MYSQL] Concaténation de plusieurs lignes
Plus de sujets relatifs à : [MySQL] Selection d'un enregistrement aléatoire [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR