9
votes

Php mysql Sélectionnez des rangées aléatoires

J'ai un problème en sélectionnant 6 amis aléatoires

C'est la requête que j'ai jusqu'à présent: xxx

Je veux sélectionner 6 amis aléatoires si l'enregistrement dans l'utilisateur a plus ou égal à 6 amis

coincé sur ceci pendant un moment maintenant: /

merci pour toute aide :)


4 commentaires

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 ']."' " 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]'" . :)


6 Réponses :


19
votes

Si vous utilisez:

  SELECT * 
    FROM friends 
   WHERE member_id = '".$_SESSION['userid']."' 
ORDER BY rand() 
   LIMIT 6


2 commentaires

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



0
votes

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
}


1 commentaires

Dois-je utiliser cette requête dans un NUM_ROWS ou FETCH_ARRAY?



0
votes

Changer limite 1 à limite 6 sur la huitième ligne.


0 commentaires

1
votes

peu importe, je l'ai compris :)
Dû utiliser tandis que pas pour : 'd


0 commentaires

0
votes

au lieu de SELECT * au début, essayez SELECT compte (*) et utilisez la valeur de retour réelle au lieu de num_rows ().

Votre boucle pourrait générer des doublons. Je suggérerais d'essayer de répondre aux poneys OMG.

Il y a tout un chapitre sur la sélection aléatoire dans le livre SQL AntiPatterns .


0 commentaires

5
votes

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
}


0 commentaires