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

Langage SQL Discussion :

Aide sur une requête


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Aide sur une requête
    Salut à tous,
    Je galère sur une requête sql depuis un bon moment alors je me permets de vous solliciter

    Pour simplifier, j'ai 2 tables Individu et Amis.
    Individu représente quelqu'un et a une clé primaire idInd.
    Amis relie 2 personnes avec comme attributs idInd1 et idInd2.

    En fait le résultat que je veux obtenir est le suivant : j'envoie comme paramètre un individu, et je veux récupérer de la table Amis, tous les enregistrement qui relient cet individu avec un autre, mais également toutes les relation entre les amis de cet individu.

    Je ne sais pas si je suis claire alors prenons un exemple :
    Imaginons que j'ai dans ma table Individu les enregistrement suivants :


    idInd
    1
    2
    3
    4
    5

    et dans Amis

    idInd1 ------- idInd2
    1 ------------- 2
    1 ------------- 3
    2 ------------- 3
    2 ------------- 4

    Donc je voudrais récupérer les 3 premières lignes de Amis mais pas la dernière car le 4 n'est pas relié à l'individu 1, ils ne sont donc pas amis. Contrairement à la ligne 3 qui sont tous les deux déjà amis avec 1.

    Après avoir abandonné cette requête, je viens d'y repenser et je dois rendre mon programme demain...

    Je vous en serais très reconnaissant si vous m'aidiez

  2. #2
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Citation Envoyé par NeoFlo Voir le message
    Donc je voudrais récupérer les 3 premières lignes de Amis mais pas la dernière car le 4 n'est pas relié à l'individu 1, ils ne sont donc pas amis.
    J'ai beau retourner cette phrase dans tout les sens je ne la comprends pas.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    je crois que ce qu'il veut dire c'est qu'il veut répertorier tous les amis d'un individu "x" (dans son exemple ici 1) et puis retrouver les liens qu'il y a entre les amis de "x" et comme ici 4 n'est pas déclaré comme ami de "x" donc toute relation avec 4 n'est pas à considérer même si 4 est un ami d'un individu qui est ami avec 1 dans cet exemple.
    Je vais y réfléchir si j'ai un peu plus de temps mais c'est plus un problème d'algorithme que de commande.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Déjà merci de répondre aussi vite

    Effectivement c'est plus une question d'algorithme... mais je suis vraiment coincé...

    phili_b, en disant "Donc je voudrais récupérer les 3 premières lignes de Amis mais pas la dernière car le 4 n'est pas relié à l'individu 1, ils ne sont donc pas amis.", je voulais dire :

    idInd1 ------- idInd2
    1 ------------- 2
    3 ------------- 1
    2 ------------- 3
    2 ------------- 4

    Toujours sachant que je veux récupérer les amis de l'individu envoyé en paramètre (dans l'exemple c'est 1).

    En regardant ce tableau de tableau de résultats :
    a. la première ligne dit que 1 est amis avec 2 (ok car 1 est dans l'un des deux).

    b. la deuxiéme ligne dit que 3 est amis avec 1 (ok car 1 est dans l'un des deux).

    c. la troisème ligne dit que 2 est amis avec 3 (ok car les deux sont amis de 1).

    d. la quatrième ligne dit que 2 est amis avec 4 (PAS ok car seulement 2 est amis de 1).


    Pour un info mon application est en flash et est un réseau d'amis à la manière de Facebook. A la différence prêt qu'une personne est représentée par un rond. Un personne connecté sous l'application peut donc voir uniquement ses amis, des traits relies le rond de la personne connectée aux ronds de ses amis, mais aussi ses amis ayant des liens sont aussi reliés par un rond.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par NII_SAMA Voir le message
    Bonjour,
    je crois que ce qu'il veut dire c'est qu'il veut répertorier tous les amis d'un individu "x" (dans son exemple ici 1) et puis retrouver les liens qu'il y a entre les amis de "x" et comme ici 4 n'est pas déclaré comme ami de "x" donc toute relation avec 4 n'est pas à considérer même si 4 est un ami d'un individu qui est ami avec 1 dans cet exemple.
    Je vais y réfléchir si j'ai un peu plus de temps mais c'est plus un problème d'algorithme que de commande.
    C'est exactement ça !

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'arrive facilement à affichier uniquement les amis de l'individu 1 avec cette requête, mais après je suis perdu ...

    Select * from Amis where idInd1=1 or idInd2 =1

  7. #7
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Ce que je comprends c'est qu'il faut que tu utilises éventuellement des jointures externes mais surtout que tu alias plusieurs fois la même table. Chaque alias servant à utiliser la même table mais de façon diffèrente puisque cette table amis a plusieurs fonctions. Le premier alias servant à trouver les liens entre les personnes et la deuxième servant à determiner les amis.

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select i.idInd
    FROM Individu i
    INNER JOIN Amis a1 
       on i.idInd=a1.idInd1  
    LEFT JOIN Amis a2 -- ou INNER je ne suis pas sûr
       on (a1.idInd2=a2.idInd1 or a1.idInd2=a2.idInd2 )

Discussions similaires

  1. [SQL] Besoin d'aide sur une requête
    Par Angath dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/01/2006, 16h26
  2. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  3. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29
  4. Aide sur une requête
    Par TshAw dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2005, 11h42
  5. Aide sur une requête (Group By...??)
    Par Cocolapin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2004, 10h26

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