Dans un premier temps, ta requête ne renvoie pas du tout ce que tu cherches à faire.
Retourne les "nombre_utilisateur" premiers articles de ta table, sans te soucier si tu as tous tes utilisateurs... et donc des "doublons" pour certains utilisateurs.
Je te conseille de faire ça :
<table border="0" summary=""> <tr> <td align="center" colspan="2"> </td> </tr> <? session_destroy(); $query="select ID_USER from USERS where PG_PUB = 'Y' ORDER BY RAND() "; $ok = fm($query); $nbr = mysql_num_rows($ok); $ligne=ceil($nbr/3); for($i=0;$i<$ligne;$i++) { echo"<tr>"; for ($j=0;$j<3;$j++) { list($ID_USER)=mysql_fetch_row($ok);
$query = "select distinct ARTICLE.ID_USER,RAISON,PHOTO from ARTICLE "; $query .= "where ARTICLE.ID_USER=$ID_USER "; $query .= " ORDER BY RAND() LIMIT 1";
$pub = fm($query); //echo "<br><center>[query : ".$query."]</center>"; list($RAISON,$PHOTO,$PG_PUB)=mysql_fetch_row($pub); if($PHOTO != "" ) { echo"<td align=\"center\" class=\"raison\"><br>"; echo"<a href=\"visu.php?action=galerie&expo=aff&page=Y&id_user=$ID_USER&pg_pub=$PG_PUB\">"; echo"<img src=\"tmp/$PHOTO\" border=\"0\" width=\"150\" ></a><br>$RAISON"; echo"</td>"; } else { echo"<td align=\"center\"> </td>"; } } $l=0; $j=0; echo"</tr>"; } mysql_free_result($ok); echo"<table border=\"0\" align=\"center\" width=\"500\" cellspacing=\"0\">"; echo"<tr>"; echo"<td align=\"center\" colspan=\"3\" bgcolor='#c1d001'><b>NOS COUPS DE COEUR </b></td>"; echo"</tr>";
echo"<tr><td align=\"center\" colspan=\"3\" bgcolor='#c1d001'> </td></tr>"; echo"</table>"; ?>
<tr> <td align="center" colspan="2"><?foot();?></td> </tr> </table>
|
Ceci dit, j'ai pour ainsi dire jamais fait de PHP, donc je ne suis dûr de rien niveau syntaxe. Par contre c'est l'algo ça suivre.
Avec un SGBD plus évolué tu aurais pu t'en sortir avec une seule requête contenant une sous-requête, mais là c'est pas possible.
Une autre solution t'aurais permit aussi de tout retourner avec une requête unique et un petit traîtement PHP, mais le caractère aléatoire du tri rends impossible ce type de fonctionnement.
Par conséquent, je ne vois pas d'autre solution que celle-ci, qui est bien minable (si t'as 100 000 utilisateurs, tu vas éxécuter 100 001 requête pour afficher la page, ce qui n'est pas terrible.
Message édité par Arjuna le 21-07-2004 à 21:08:25