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 :

est ce possible en une seule requete !


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 38
    Points : 26
    Points
    26
    Par défaut est ce possible en une seule requete !
    Bonjour à tous,

    Je galère depuis un 2 jours sur une requête que je n'arrive pas à faire, merci de me donner quelques indications ou conseils .

    Je schématise la base :
    ---------------------------


    --
    -- Structure de la table `users`
    --

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `users` ( 
      `user_id` mediumint(8) NOT NULL default '0', 
      `user_photo` varchar(100) default NULL, 
      `user_nom` varchar(255) default NULL, 
      `user_prenom` varchar(100) default NULL, 
        PRIMARY KEY  (`user_id`), 
      ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    -- --------------------------------------------------------

    --
    -- Structure de la table `users_comments`
    --

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE `users_comments` (
      `comment_id` mediumint(8) NOT NULL auto_increment,
      `user_id` mediumint(8) NOT NULL default '0', ==> celui qui reçoit le commentaire
      `poster_id` mediumint(8) NOT NULL default '0', ==> celui qui émet le commentaire
      `comments` text NOT NULL,
      `time` int(11) default NULL,
      PRIMARY KEY  (`comment_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    La requête est de vouloir afficher en une seule requête :

    Prénom nom ( poster_id) a commenté prénom nom ( user_id)


    J'ai fait celle-ci mais elle ne m'affiche que le Prénom nom ( poster_id) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
      $sql = "SELECT uc.*, u.user_cheve AS poster_name, u.user_interests AS poster_familyname
       FROM " . $table_prefix . "users_comments uc, " . USERS_TABLE . " u
       WHERE uc.user_id <> uc.poster_id
       AND uc.time >= $min_comments_time
       AND u.user_id = uc.poster_id   
       ORDER BY time DESC";
    Ma question : est ce la requete est faisable en une seule ou dois-je récupérer le user_id de la requête du dessus et faire une autre pour afficher le prénom et le nom de ce dernier . merci d'avance .

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Juste quelques remarques avant de répondre...

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    `user_nom` varchar(255) DEFAULT NULL, 
      `user_prenom` varchar(100) DEFAULT NULL,
    Tu connais des noms et des prénoms aussi longs ?

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `time` int(11) DEFAULT NULL,
    C'est un temps en secondes ?
    Sinon si c'est pour enregistrer le jour et l'heure de postage du commentaire, il vaudrait mieux un type DATETIME par exemple.

    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM " . $table_prefix . "users_comments uc, " . USERS_TABLE . " u
    La syntaxe normalisée pour les jointure est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM tableA
    JOIN table B ON Condition_De_Jointure
    4)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT uc.*, u.user_cheve AS poster_name, u.user_interests AS poster_familyname
    Je ne vois pas les colonnes user_cheve ni user_interests dans la table users. Tu es sûr que ta requête est en rapport avec ta demande ?

    Passons à ton besoin :
    La requête est de vouloir afficher en une seule requête :

    Prénom nom ( poster_id) a commenté prénom nom ( user_id)
    Il faut faire une double jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT u1.user_prenom AS PrenomPosteur, 
      u1.user_nom AS NomPosteur,
      u2.user_prenom AS PrenomUser,
      u2.user_nom AS NomUser
    FROM user_comments uc
    INNER JOIN users u1 ON uc.poster_id = u1.user_id
    INNER JOIN users u2 ON uc.user_id = u2.user_id

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Merci CinePhil de ton aide precieuse, oui tu as raison je me suis embrouillé dans mon explication . Grace à toi et ton "users u2" ça m'a mis sur la voie, je viens de la reussir m'inspirant de ton exemple ( meme si cette derniere n'etait pas la bonne ) sans les "inner join" .

    merci mille fois .

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par cmoi70 Voir le message
    sans les "inner join" .
    Ca c'est pas bien !
    C'est la norme d'écriture des jointures depuis 1992 ! Faudrait peut-être s'y mettre !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Est-ce possible en une seule requête ?
    Par pc75 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/09/2013, 09h08
  2. Est-ce que c'est possible en une seule requête?
    Par geraldgg dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/12/2008, 18h44
  3. Plusieur Update en une seule requete?
    Par sirbaldur dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/06/2006, 13h13
  4. Réponses: 4
    Dernier message: 08/06/2006, 20h06

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