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 :

Perdu pour créer ma requête


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Transports

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Par défaut Perdu pour créer ma requête
    Bonjour,

    je suis débutant en PHP et j'aimerai créer une requête assez complexe.. autant vous dire que je galère!

    Il y a une page ou les utilisateurs peuvent voir des avatars un par un qu'une seule fois. Pour se faire, dès qu'un utilisateur voit un avatar, je rajoute une entrée dans ma table views.sql avec l'ID de l'utilisateur, et l'ID du proprietaire de la photo. Comme ça, je peux dire dans ma requête que je veux afficher seulement les photos que l'utilisateur n'a pas vu.

    Voici mes deux tables:

    Nom : sql.png
Affichages : 147
Taille : 9,8 Ko

    J'en déduis qu'il faut que je fasse une jointure, mais je me bourre le crâne de cours sur les jointures depuis 1h30, je ne comprends rien, et je commence à perdre espoir...

    Merci d'avance,
    Lucas

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 498
    Par défaut
    Bonjour,
    Est-ce que l'exemple fourni indique que Bastien a vu la photo de Lucas, ou l'inverse ?

    Sinon un début de piste:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select t1.*
    from LaTable t1
    left outer join LautreTable T2 on t1.id = t2.idt1
    where t2.id is null
    Cette requête renvoie les lignes de LaTable, pour lesquelles il n'y a pas de correspondance dans LautreTable.

    Tatayo.

  3. #3
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Transports

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Par défaut
    Merci beaucoup pour ton aide! Gros soulagement

    Cela signifique que Lucas a vu la photo de Bastien.

    Je ne comprends pas trop la requête.. pôurrais-tu me l'expliquer stp?

    Merci encore
    Lucas

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    TABLE1 LEFT OUTER JOIN TABLE2 ON CONDITION

    Signifie qu'on veut TOUTES LES LIGNES DE TABLE1 ainsi que UNIQUEMENT LES LIGNES DE TABLE2 POUR LESQUELLES LA CONDITION EST VRAIE

    Donc dans ton cas, TABLE1 sera la table des profiles et TABLE2 sera la table des vues.
    Quand à condition sera une égalité entre "profile.userid" et "views.from" plus un filtre sur "views.to" sur le "userid" de l'utilisateur connecté.

    Enfin, ce qui t'intéresse, c'est pas d'avoir la liste de tous les profils avec en face s'ils ont eu une visite ou non, mais les profils sans visite. Donc on rajoute un filtre (WHERE cette fois) pour ne retenir que les lignes où les colonnes de TABLE2 sont nulles (donc pas de correspondance). On prend si possible l'identifiant car à la fois plus lisible et de facto non null, ça évite au SGBD de vérifier réellement les données.

    Une autre variante plus simple à lire aurait été :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select *
    from profils p
    where p.userid not in (select v.from from views where v.to = <utilisateur connecté>)

    ON veut tous les profils qui ne font pas partie de ceux déjà visités par l'utilisateur connecté.

  5. #5
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Transports

    Informations forums :
    Inscription : Août 2014
    Messages : 11
    Par défaut
    Merci pour ta réponse, la requête marche!
    Il y a juste un problème.... Cela fait l'effet inverse! Ca n'affiche que les personnes qui sont rentrées dans la table views.sql :/

    Voici ma requête que j'ai modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, avatar 
    FROM profiles 
    WHERE profiles.id_user NOT IN (SELECT views.from FROM views WHERE views.to = "'.$_SESSION['login'].'")
    Je ne vois pas comment inverser :/

    Merci encore!
    Lucas

  6. #6
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    peut-être FROM à la place de TO

Discussions similaires

  1. [AC-2007] Aide pour créer 1 requête
    Par MaryR dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 10/01/2010, 23h13
  2. Besoin d'aide pour créer une requête
    Par cedric/copy dans le forum ASP
    Réponses: 6
    Dernier message: 13/03/2009, 17h29
  3. Besoin d'aide pour créer une requête
    Par fabien59420 dans le forum Requêtes et SQL.
    Réponses: 44
    Dernier message: 26/05/2008, 12h08
  4. [MySQL] Problème pour créer un requète
    Par Are-no dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/05/2007, 19h02
  5. [SQL] Sprintf ou concaténation pour créer les requêtes SQL?
    Par EvilAngel dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/09/2006, 18h08

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