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 :

recuperer les id sur plusieurs champs


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Points : 101
    Points
    101
    Par défaut recuperer les id sur plusieurs champs
    bonjour a tous,

    bon mon titre est pas très explicite mais je vais essayer d'etre plus clair avec la structure de ma base. Voici - une partie de mon dump sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    CREATE TABLE `joueurs` (
      `id` int(10) unsigned zerofill NOT NULL auto_increment,
      `m_p_id` mediumint(8) unsigned zerofill NOT NULL default '00000000',
      `m_id` smallint(5) unsigned zerofill NOT NULL default '00000',
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM COMMENT='table des joueurs';
     
    CREATE TABLE `joueurs_evts` (
      `id` int(11) unsigned zerofill NOT NULL default '00000000000',
      `joueurs_id_source` int(10) unsigned zerofill NOT NULL default '0000000000',
      `joueurs_id_dest` int(10) unsigned zerofill NOT NULL default '0000000000',
      `date_d_envoi` date NOT NULL default '0000-00-00',
      `est_envoye` enum('Y','N') NOT NULL default 'N',
      KEY `est_envoye` (`est_envoye`),
      KEY `joueur_id_source` (`joueur_id_source`),
      KEY `joueur_id_dest` (`joueur_id_dest`)
    ) TYPE=MyISAM COMMENT='table des evenements';
     
    CREATE TABLE `modele_personnage_interactions` (
      `m_p_id_source` mediumint(8) unsigned zerofill NOT NULL default '00000000',
      `m_p_id_dest` mediumint(8) unsigned zerofill NOT NULL default '00000000',
      `duree` tinyint(3) unsigned zerofill NOT NULL default '000',
      UNIQUE KEY `p_p_id_source_2` (`m_p_id_source`,`m_p_id_dest`)
    ) TYPE=MyISAM COMMENT='tables des etats diplomatiques initiaux';
     
    CREATE TABLE `modele_personnage` (
      `id` mediumint(8) unsigned zerofill NOT NULL auto_increment,
      PRIMARY KEY  (`id`),
    ) TYPE=MyISAM COMMENT='table des modèles de personnages jouables';
     
     
     
    CREATE TABLE `membres` (
      `id` smallint(5) unsigned zerofill NOT NULL default '00000',
      `login` varchar(255) NOT NULL default '',
      PRIMARY KEY  (`id`),
    ) TYPE=MyISAM COMMENT='table des membres inscrits';
    Voici les dependances:
    # tables joueurs_evts
    # joueurs_evts.joueurs_id_source -> joueurs.id
    # joueurs_evts.joueurs_id_dest => joueurs.id

    # table joueurs
    # joueurs.m_id -> membres.id
    # joueurs.m_p_id -> modele_personnage.id

    # table modele_personnage_interactions
    # m_p_id_source -> modele_personnage.id
    # m_p_id_dest -> modele_personnage.id
    la table joueurs_evts permet de suivre les evenements qui se sont deroulés entre plusieurs joueurs. j'aimerai recuperer tous les messages non envoyés (non_envoye = 'N') et dont la date du jour correspond a la date de postage (date_d_envoi) + la durée (modele_personnage_interactions.duree)

    seulement du fait que les tables joueurs_evts et modele_personnage_interactions possèdent deux champs pointant sur la meme clé (respectivement modele_personnage.id et joueurs.id) il me semble difficile avec des jointure de recuperer ces champs en une seule requete. Donc si vous avez une idée pour realiser cette operation en le moins de requetes possibles , cela m'aiderait beaucoup , je seche un peu

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Avant d'aller plus loin, je ne saurais trop te conseiller, si c'est possible, de revoir ta nomenclature (Id, m_Id, m_p_id ...). Si j'ai bien compris le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT j.Id
    FROM `joueurs_evts` AS j, 
         'joueurs' AS j1,
         'joueurs' AS j2,
         'modele_personnage_interactions' AS mp1
         'modele_personnage_interactions' AS mp2
    WHERE j1.id = j.joueur_id_source
      AND j2.id = j.joueur_id_dest
      AND mp1.m_p_id_source = j1.m_p_id
      AND mp2.m_p_id_dest = j2.m_p_id
      AND (date du jour pour ton sgbdr) = date_d_envoi + duree
      AND est_envoye = 'N'
    J'ai supposé que date_d_envoi était une date sans heure et duree un nombre de jours
    Bien sur en fonction de ton sgbdr, tu peux, peut-être, utiliser la syntaxe normée pour les jointures

  3. #3
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    bonjour,

    merci de l'interet que tu as y passé
    Citation Envoyé par pgibone
    'ai supposé que date_d_envoi était une date sans heure et duree un nombre de jours
    en effet, c'est bien ca

    seulement cela ne fonctionne pas
    les jointures que tu me propose entre les tables joeurs et joueurs_evnts fonctionne bien, pas de probleme. Cela me retourne 4 enregistrements.
    Seulement voila les jointures ensuite sur la table modele de personnage ne me retourne aucun enregistrement alors que - j'ai verifie - les identifiants sont bien present.

    mon sgbd est mysql 4.

  4. #4
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    autant pour moi
    effectivement une erreur d'identifiant pour un enregistrement test
    merci pour ton aide

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Content de pouvoir aider.
    N'oublie pas le tag RESOLU

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/10/2014, 19h25
  2. Réponses: 2
    Dernier message: 13/03/2012, 15h19
  3. Réponses: 2
    Dernier message: 30/11/2004, 09h42
  4. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41
  5. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55

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