IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Comment créer une liste d'amis avec SQL


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 293
    Points : 77
    Points
    77
    Par défaut Comment créer une liste d'amis avec SQL
    Bonjour,

    Comment il faudrait faire pour créer une liste d'amis avec sql ?


    J'ai deux solutions en tête:


    1ere solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO liste_amis VALUES('', 'compte_principal', 'id_compte_principal', 'le_pseudo_du_compte_ami', 'actif')
    id = 1
    compte_principal = le pseudo du compte principal de la personne
    id_compte_principal = pour se connecter sur des autres tables
    le_pseudo_du_compte_ami = dans chaque ligne il y aurait par exemple "pseudo1", "pseudo2" ....
    actif = oui ou non

    ensuite si une personne a 500 amis sur une liste de 80 000 lignes (dans la tables) il y a aurait un risque de lag avec sql , un temps pour charger...


    2eme solution:
    Il faudrait peut-etre faire une colonne unique pour un seul compte unique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    id 	| compte_principal 	| 	id_compte_principal		 | liste_damis_actuels	 | liste_damis_en_attente
    1	| pseudo1		|	3621			| jojo1,jojo2,jojo3,jojo4	| jojo5,jojo6,jojo7
    Ensuite avec un while il y aurait par exemple:
    $donnees['liste_damis_actuels'] avec un explode et un foreach pour récuperer tous les amis ou un ami en particulier


    Le systeme le plus logique, c'est la solution n°1 ou n° 2 ? ou il faut encore une 3eme solution que je ne connais pas ?

    Le truc que j'aimerais savoir, est-ce qu'une seule case peut contenir par exemple une liste de 3000 pseudos? est-ce qu'il y a un risque de lag ? est-ce que c'est logique de mettre 3000 pseudos dans une seule case ?

    C'est trés dure d'expliquer.

    Merci d'avance,
    salutations

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Aucune des deux solutions n'est bonne.


    On repart du MCD :
    Personne-0,n---Est_ami----0,n-Personne

    Coté mpd :
    Personne(ID_PERSONNE, pseudo, .....)
    Lien_Amie(#ID_PERSONNE_PRINCIPALE, #ID_PERSONNE_AMI)

    En gras les clef primaire, et # pour les clefs étrangère.

    Si, votre clef primaire de la table personne est un entier (ce qui devrait être), la table lien_amie avec 1 000 000 de lignes fera en gros 15mo.

    Aucun lag à prévoir lors du requetage, pour peut qu'il y est des indexs.

  3. #3
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 293
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Je comprend peut-être, merci de m'avoir répondu , j'ai lu environ 20 fois ta réponse pour bien comprendre.

    Le truc que tu veux dire c'est d'utiliser "l'id primaire" de toute la table de chaque compte:



    Table principale 'letchat'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id(letc	|	pseudo	|	password	| etc....
    1	|	Coucou	|	************	| ...
    2	|	kiki	|	*****		|...
    ...	|	...	|	*****		|...
    1000	|	toto	|	*****		|...
    ....
    ensuite il me suffit de créer une table 'liste_amis' avec seulement 3 colonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    id	|	id_letchat		|	id_ami
    1	|	1		|	2
    2	|	1		|	1000
    500	|	1000		|	1
    ...
    Donc avec un SELECT si j'veux récuperer les amis de "Coucou" sa afficherait donc "kiki" et "toto" ?

    Et si je veux afficher les amis de "toto" sa affiche donc qu'il est en ami avec le pseudo "Coucou" ?



    C'est bien ça ?

    En tout cas en effet cette solution est bien, il en existe peut-être une autre de solution de mieux?

    Merci, salutations

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    oui c'est bien.

    Non y a pas mieux.

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 293
    Points : 77
    Points
    77
    Par défaut
    Ok merci, je vais faire comme ça.

  6. #6
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 293
    Points : 77
    Points
    77
    Par défaut
    rebonjour,

    J'hésite entre INT, TEXT et VARCHAR


    id = INT + AI
    id_letchat = INT, TEXT ou Varchar?
    id_ami = le même que id_letchat je pense?


    C'est mieux de mettre "INT" sur les 3 je pense ?

    Merci d'avance,
    salutations

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    ce qu'il faut faire, avec les explications : http://sqlpro.developpez.com/cours/clefs/

    (sinon pour la table lien d'amitié sa clef primaire peut être les deux colonnes id_personne)

  8. #8
    Nouveau membre du Club Avatar de laplumaencre
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 18
    Points : 30
    Points
    30
    Par défaut
    Salut à tous, bon je déterre ce post un peu vieux, mais toujours d'actualité :-D
    J'ai besoin de créé ce système de liste d'amis, donc j'ai bien saisi le fonctionnement proposer, mais j'ai du mal à comprendre une chose, c'est l'histoire des clé primaires, ça va servir a quoi, est-ce que je suis obligé d'en utiliser ?
    Questions de débutant je sais :-D
    merci.
    skribascode.fr

  9. #9
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut laplumaencre.

    La solution proposée par punkoff est tout à fait correcte.
    Citation Envoyé par punkoff
    Personne(ID_PERSONNE, pseudo, .....)
    Lien_Amie(#ID_PERSONNE_PRINCIPALE, #ID_PERSONNE_AMI)
    Le '#' devant les noms des colonnes sont des clefs étrangères qui pointent sur la table personne.
    En gras, ce sont les clefs primaires de la table.

    Une table, en principe, nécessite de rendre la ligne accessible d'une manière unique. C'est le rôle de la clef primaire.
    Si tu n'utilises pas de clefs primaires, comment vas-tu faire le lien entre le couple (id_personne_principale ; id_personne_ami) et le descriptif qui se trouve dans la table 'personne' ?
    Ces deux colonnes : id_personne_principale et id_personne_ami pointent toutes les deux sur la colonne 'id_personne'.
    Cela ne peut se faire que si tu déclares ces deux colonnes en tant que clefs étrangères.

    Ou bien, je n'ai pas compris ton problème.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/05/2006, 08h19
  2. Réponses: 0
    Dernier message: 24/03/2006, 08h33
  3. Réponses: 0
    Dernier message: 17/10/2005, 08h05
  4. Réponses: 5
    Dernier message: 29/09/2005, 14h37
  5. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/04/2005, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo