[Liste d'amis] Créer des liens entre membres
Fermé
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
-
Modifié par JooS le 27/06/2011 à 17:56
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 29 juin 2011 à 21:10
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 29 juin 2011 à 21:10
A voir également:
- [Liste d'amis] Créer des liens entre membres
- Liste déroulante excel - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Créer un groupe whatsapp - Guide
4 réponses
Meoran
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
203
Modifié par Meoran le 29/06/2011 à 00:28
Modifié par Meoran le 29/06/2011 à 00:28
J'ai fait un test pour prouver que le nombre de couple d'amis est sans importance, le résultat est toujours donné très rapidement !
J'ai pour cela une table qui contient des couples d'iduser, indiquant ainsi des couples d'amis.
Ex : Le couple 404 <-> 1356 indique que 404 et 1356 sont amis.
Ce couple est bien évidemment unique et de cette façon le couple 1356 <-> 404 ne peut pas exister vu qu'il indique la même chose que le couple du dessus.
J'ai créé ainsi 100 000 couples liant 3000 users entre eux. Soit une moyenne de 33,33... amis par user.
J'ai pour cela une table qui contient des couples d'iduser, indiquant ainsi des couples d'amis.
Ex : Le couple 404 <-> 1356 indique que 404 et 1356 sont amis.
Ce couple est bien évidemment unique et de cette façon le couple 1356 <-> 404 ne peut pas exister vu qu'il indique la même chose que le couple du dessus.
J'ai créé ainsi 100 000 couples liant 3000 users entre eux. Soit une moyenne de 33,33... amis par user.
CrazyWorld
Messages postés
326
Date d'inscription
samedi 8 novembre 2008
Statut
Membre
Dernière intervention
16 février 2013
41
27 juin 2011 à 18:57
27 juin 2011 à 18:57
Salut, je ferai une table listedamis
avec basiquement 3 champs
-Expediteur de la demande d' amis
-Destinataire de la demande
-Comfirmé (pour savoir si le destinataire a accepté ou pas)
Disons que tu as que 2 membres A et B
A fait une demande d' amis à B
B recoit l' invitation et l' accepte. En cliquant sur Accepter l' invitation, tu en profites pour passer la valeur "Yes" au champ Comfirmé.
Ensuite pour afficher la liste sur un profil
Tu récupères le pseudo du profil que tu visites
Si par exemple A va sur le profil de B, tu récupères le pseudo de B($B)
Et là tu lances une requete du style.
Select * from listedamis where Expediteur == B OR Destinataire == B
tu récupéres les variables Expediteur et Destinataire
Et tu fais juste une petite condition
if ($expediteur==$B){$amis="$destinataire";}
if ($destinataire==$B){$amis="$expediteur";}
Voilà le schema que je ferai. C est juste pour te donner une idée
Si tu comprends le principe, tu deverais pouvoir coder tout ca.
avec basiquement 3 champs
-Expediteur de la demande d' amis
-Destinataire de la demande
-Comfirmé (pour savoir si le destinataire a accepté ou pas)
Disons que tu as que 2 membres A et B
A fait une demande d' amis à B
B recoit l' invitation et l' accepte. En cliquant sur Accepter l' invitation, tu en profites pour passer la valeur "Yes" au champ Comfirmé.
Ensuite pour afficher la liste sur un profil
Tu récupères le pseudo du profil que tu visites
Si par exemple A va sur le profil de B, tu récupères le pseudo de B($B)
Et là tu lances une requete du style.
Select * from listedamis where Expediteur == B OR Destinataire == B
tu récupéres les variables Expediteur et Destinataire
Et tu fais juste une petite condition
if ($expediteur==$B){$amis="$destinataire";}
if ($destinataire==$B){$amis="$expediteur";}
Voilà le schema que je ferai. C est juste pour te donner une idée
Si tu comprends le principe, tu deverais pouvoir coder tout ca.
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 27/06/2011 à 19:53
Modifié par JooS le 27/06/2011 à 19:53
C'est bien tout cela ...
mais disons que A a 100 amis, ou est stocké cette liste d'amis ... ??
Edit : Ah c'est bon, j'ai saisi ... C'est une idée ... Merci
mais disons que A a 100 amis, ou est stocké cette liste d'amis ... ??
Edit : Ah c'est bon, j'ai saisi ... C'est une idée ... Merci
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 27/06/2011 à 19:57
Modifié par JooS le 27/06/2011 à 19:57
Mais je pense pas que ça soit pratique, imaginons que la table listeamis contient plus de 100000 entrés, donc a chaque fois que que je voudrai afficher une liste d'amis, il faudrait que je parcours les 100 000 entrés !!!, ...
Il existe surement une astuce pour éviter cela ...
Il existe surement une astuce pour éviter cela ...
CrazyWorld
Messages postés
326
Date d'inscription
samedi 8 novembre 2008
Statut
Membre
Dernière intervention
16 février 2013
41
27 juin 2011 à 20:43
27 juin 2011 à 20:43
Je pense pas qu' on puisse faire plus optimisé surtout si tu comptes avoir des listes d' amis de fou
CrazyWorld
Messages postés
326
Date d'inscription
samedi 8 novembre 2008
Statut
Membre
Dernière intervention
16 février 2013
41
27 juin 2011 à 20:20
27 juin 2011 à 20:20
Dans ta table utilisateur, tu rajoutes un champ "amis"
Et à chaque fois qu' une demande d' amis est acceptée,
Tu fais une mise à jour du champ "amis" en ajoutant le pseudo avec un symbole de séparation une virgule par exemple
de telle manière à donner à la longue pour l'utilisateur B
dans le champ "amis"
A, C, D, E, F, G,
Et dans le profil tu récupères cette liste et tu la traites avec des fonctions explode()
et/ou preg_replace()
Et à chaque fois qu' une demande d' amis est acceptée,
Tu fais une mise à jour du champ "amis" en ajoutant le pseudo avec un symbole de séparation une virgule par exemple
de telle manière à donner à la longue pour l'utilisateur B
dans le champ "amis"
A, C, D, E, F, G,
Et dans le profil tu récupères cette liste et tu la traites avec des fonctions explode()
et/ou preg_replace()
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
27 juin 2011 à 20:36
27 juin 2011 à 20:36
C'est ce que j'avais fait, mais je voulais pas aller plus loin parce que je pensais que c'était faux, et qu'il y avait une technique meilleure ...
Meoran
Messages postés
1562
Date d'inscription
vendredi 28 août 2009
Statut
Membre
Dernière intervention
8 avril 2015
203
28 juin 2011 à 17:17
28 juin 2011 à 17:17
C'est pas beau du tout ça :/
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
28 juin 2011 à 21:03
28 juin 2011 à 21:03
@Meoran ben éclaire nous si t'as mieux ?!
Modifié par Meoran le 29/06/2011 à 00:46
Modifié par Meoran le 29/06/2011 à 00:46
Je sélectionne, pour 100 users choisit aléatoirement, leurs amis respectifs.
Ce qui donne, pour chaque user une requete du type :
select * from table where iduser1 = 100 OR iduser2 = 100;
Je stocke le temps d"exécution de la requête, puis je fais la moyenne de ces temps d'exécution pour les 100 users.
D'abord le code :
Bilan : La moyenne approche de 0.05 s. Autant dire rien du tout :/
Alors même si tu passes à 200 000 couples d'amis, ou 6000 amis ou 100 amis de moyenne pour chaque user, ce temps restera toujours risiblement faible...
Modifié par JooS le 29/06/2011 à 15:36
Comment est ce que tu peut être sure que les couples sont uniques, tu n'a même pas fait de teste pour éviter les doublons !!!
Quant a la dernière requête, ben essaye avec 500 000 couples pour voir ?!!!
Un site dont le nombre de membre est 10 000, et ou en moyenne chaque membre ait 1000 amis ... contiendra (si mes calculs sont juste) en final 9 990 000 de couples ... donc c'est beaucoup pour un simple affichage ...
Modifié par Meoran le 29/06/2011 à 10:15
Je te fait cet après midi, une simulation avec 50 000 utilisateurs et 130 amis en moyenne par personne, qui est la moyenne sur facebook. Soit 6 500 000 lignes.
Et je suis déjà certain du résultat...
Modifié par Meoran le 29/06/2011 à 15:52
Moyenne : 1,80 s par recherche.
Franchement, ça reste plus que correct (ça commence déjà à être de la bd de fou), surtout que par exemple tu n'as qu'à faire cette recherche une fois à la connexion de chaque user et placé le résultat dans une variable de session...
Et j'attends avec impatience le jour où ton site atteindra 50 000 utilisateurs.