J'ai un problème en sélectionnant 6 amis aléatoires
C'est la requête que j'ai jusqu'à présent: p> Je veux sélectionner 6 amis aléatoires si l'enregistrement dans l'utilisateur a plus ou égal à 6 amis p> coincé sur ceci pendant un moment maintenant: / p> merci pour toute aide :) P> P>
6 Réponses :
Si vous utilisez:
SELECT * FROM friends WHERE member_id = '".$_SESSION['userid']."' ORDER BY rand() LIMIT 6
L'ordre de Rand est dangereusement lent avec beaucoup de données.
Il y a un article ici avec des détails et des alternatives: Titov.net/2005/09/21/...
Commencez par sélectionner le nombre d'amis que l'utilisateur a:
for($z=0;$z<6;$z++) { $randomFriendIndex = rand(1,$numFriends); //Get the friend at that index }
Dois-je utiliser cette requête dans un NUM_ROWS ou FETCH_ARRAY?
Changer limite 1 code> à
limite 6 code> sur la huitième ligne. P>
peu importe, je l'ai compris :)
Dû utiliser tandis que fort> pas
au lieu de Votre boucle pourrait générer des doublons. Je suggérerais d'essayer de répondre aux poneys OMG. P>
Il y a tout un chapitre sur la sélection aléatoire dans le livre SQL AntiPatterns . P> SELECT * code> au début, essayez
SELECT compte (*) code> et utilisez la valeur de retour réelle au lieu de num_rows (). P>
Le meilleur moyen que j'ai trouvé pour sélectionner n'importe quel nombre d'enregistrements aléatoires est avec décalage dans la requête.
Disons que vous voulez 6 enregistrements aléatoires, donc je vais emprunter à une réponse ci-dessus et compter le nombre total de Amis de la base de données. P>
$query = mysql_query("SELECT * FROM friends WHERE member_id='". $_SESSION['userid'] ."' LIMIT 6 OFFSET " . (rand(0, $numFriends)); while ($rows = mysql_fetch_array($query)) { /// show your $rows here }
Seulement si la personne a 6 amis ou plus?
Un peu hors sujet, mais vous pouvez gagner du temps en utilisant des accolades dans des chaînes. Comme au lieu de
'". $ _ Session [' userid ']."' " Code> Vous pouvez utiliser` '{$ _session [' userid ']}' "
Seulement si la personne a 6 ou plus, oui bon à savoir :)
@Shubham Si ce n'est qu'un tableau unidimensionnel, il suffit même d'écrire
"'$ _ session [userid]'" code>. :)