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 :

Requete tables liées (mais pas toujours )


Sujet :

Langage SQL

  1. #1
    Membre averti Avatar de camyo
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2004
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2004
    Messages : 400
    Points : 386
    Points
    386
    Par défaut Requete tables liées (mais pas toujours )
    Bonjour,

    je m'explique ..
    j'ai deux tables :

    membres_tbl:
    id_membre,
    pseudo_login,
    nom,
    prenom,
    email,
    date_inscription,
    statut,
    groupe

    createurs_tbl:

    id_createur
    pseudo_createur
    descriptif
    statut_juridique
    date_candidature
    nb_creations
    etat

    J'ai des membres, qui ne sont pas forcement créateurs ..

    alors, actuellement, ma requête ne m'affiche que les membres inscrit dans créateurs ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id_membre, pseudo_login, nom, prenom, email, date_inscription, statut, groupe, nb_creations FROM membres_tbl,createurs_tbl  WHERE id_createur=id_membre && ( '.$tri.' LIKE \''.$lettre.'%\'  OR '.$tri.' LIKE \''.strtoupper($lettre).'%\'  ) ORDER BY '.$tri;
    $tri = nom; (par exemple ...)

    La liaison "id_createur=id_membre " me sert à connaitre "nb_creations" si il est créateurs, mais je voudrait quand même afficher les simples membre ..

    ai_je été clair ?

    Merci d'avance, si vous y voyez plus clair que moi ..

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par camyo Voir le message
    J'ai des membres, qui ne sont pas forcement créateurs ..
    Ceci suppose que tous les créateurs sont des membres ?
    D'après la requête et la suite du message, il semble que oui.

    membres_tbl:
    id_membre,
    pseudo_login,
    nom,
    prenom,
    email,
    date_inscription,
    statut,
    groupe

    createurs_tbl:

    id_createur
    pseudo_createur
    descriptif
    statut_juridique
    date_candidature
    nb_creations
    etat
    Pourquoi avoir répété le pseudo dans la table des créateurs ? Ce n'est pas le même que le pseudo-membre ?

    alors, actuellement, ma requête ne m'affiche que les membres inscrit dans créateurs ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id_membre, pseudo_login, nom, prenom, email, date_inscription, statut, groupe, nb_creations 
    FROM membres_tbl,createurs_tbl  
    WHERE id_createur=id_membre && ( '.$tri.' LIKE \''.$lettre.'%\'  
      OR '.$tri.' LIKE \''.strtoupper($lettre).'%\'  ) 
    ORDER BY '.$tri;
    $tri = nom; (par exemple ...)

    La liaison "id_createur=id_membre " me sert à connaitre "nb_creations" si il est créateurs, mais je voudrait quand même afficher les simples membre ..
    Il faut utiliser une jointure externe, et en profiter pour se mettre à la page en adoptant la syntaxe normalisée depuis 1992 pour les jointures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT m.id_membre, m.pseudo_login, m.nom, m.prenom, m.email, m.date_inscription, m.statut, m.groupe, m.nb_creations
    FROM membres_tbl AS m
    LEFT OUTER JOIN createurs_tbl AS c ON c.id_createur = m.id_membre
    WHERE  '.$tri.' LIKE \''.$lettre.'%\' 
      OR '.$tri.' LIKE \''.strtoupper($lettre).'%\' 
    ORDER BY '.$tri;
    J'en profite aussi pour dire que le ET en SQL s'écrit AND et non pas && et que plutôt que d'abuser des antislashes, autant mettre toute la requête entre guillemets et ne mettre des apostrophes que là où elles sont indispensables.
    Ca devrait donner ça :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $requête = "SELECT m.id_membre, m.pseudo_login, m.nom, m.prenom, m.email, m.date_inscription, m.statut, m.groupe, m.nb_creations
    FROM membres_tbl AS m
    LEFT OUTER JOIN createurs_tbl AS c ON c.id_createur = m.id_membre
    WHERE  $tri LIKE '$lettre"."%' 
      OR $tri LIKE '".strtoupper($lettre)."%' 
    ORDER BY $tri";

    Dernière chose, si le nombre de création est une colonne calculable à partir de d'autres données issues d'autres tables, elle ne devrait pas figurer dans la table.

  3. #3
    Membre averti Avatar de camyo
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2004
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2004
    Messages : 400
    Points : 386
    Points
    386
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ceci suppose que tous les créateurs sont des membres ?
    D'après la requête et la suite du message, il semble que oui.
    Effectivement, la réponse est oui

    Citation Envoyé par CinePhil Voir le message
    Pourquoi avoir répété le pseudo dans la table des créateurs ? Ce n'est pas le même que le pseudo-membre ?
    Le pseudo_login, est le login de connexion, le pseudo créateur est une sorte de nom d'artiste ..

    Citation Envoyé par CinePhil Voir le message
    Il faut utiliser une jointure externe, et en profiter pour se mettre à la page en adoptant la syntaxe normalisée depuis 1992 pour les jointures :
    Je dois avouer reprendre un site codé il y a longtemps par un précédant webmaster , après 92 cependant ..

    Toutefois, merci, je vais me pencher sur ces pistes et tenter de mettre à jour tous les appels à base de données ...

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/01/2008, 22h59
  2. CSS oui, mais pas toujours
    Par Michel Rotta dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 02/11/2007, 09h29
  3. 3 tables liées mais une seule ligne de retour ?
    Par seb_perl dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/01/2007, 12h20
  4. erreur de requete sous php mais pas sous mysql
    Par kenny49 dans le forum Requêtes
    Réponses: 21
    Dernier message: 28/06/2006, 16h36
  5. [PL/SQL] requete qui marche mais pas dans un cursor
    Par victor.ward dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/09/2005, 22h21

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