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 :

Requête SQL table to table


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut Requête SQL table to table
    Bonjour,
    j'ai une souci avec un affichage de donnée avec du SQL

    Je vous explique mon but :
    J'ai 2 tables
    1er : une table User (champs : id, nom, prenom, email, user, pass, level et actif)
    2e : une table soirée (champs : id, titre_soiree, date, personne )

    ce que je veux faire c'est d'afficher sur une page web, toute les soirées que l'on a fait et pour chaque soirée qui est venue.

    Donc, cela j'y arrive, mais dans mon champs : personne, il me mets les numéros des id des users et non les noms

    Ex désiré:
    Soirée du 24.06.11 :participant : Monsieur X, Madame Y, Monsieur Z

    Ce que ca me donne sur ma page :
    Soirée du 24.06.11 :participant : 1, 2, 3

    (
    1 = Monsieur X
    2 = Madame Y
    3 = Monsieur Z
    )

    Dans ma base de donnée, dans le champs personne de la table Soirée, j'ai comme donnée : 1,2,3
    (quand j'insère une ligne, j'ai fait en sorte que je peux sélectionner en case à cocher toute personne présente dans la soirée, et ca me retourne comme information l'id des user dans le champs personne)

    J'espère avoir été assez claire, c'est jamais facile d'expliquer un problème..

    en tout cas, merci d'avance de votre aide..

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    bonjour

    ce serait bien de fournir la requête en cause (en indiquant aussi le SGBD utilisé).

    Cela semble lié au fait que la colonne sélectionnée devrait être Nom et Prenom ?
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il faut faire une jointure entre les deux tables afin de récupérer le nom de la personne.

    Ce serait bien aussi de nous donner la requête que tu as faite et qui aboutit au résultat obtenu.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre habitué
    Homme Profil pro
    Data Ingenieur
    Inscrit en
    Mai 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Data Ingenieur
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2006
    Messages : 133
    Points : 162
    Points
    162
    Par défaut
    Bonjour,

    Pour faire propre

    une table User :
    id ( PK ? ),
    nom,
    prénom,
    émail,
    user,
    pass,
    level
    actif

    table soirée :
    id ( PK ),
    titre_soiree,
    date,
    personne_ID ( FK avec l'ID de la table user)

    Pour ta requête je dirais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select a.titre_soiree,a.date,B.nom,B.prenom
    from soirée  a
    inner join User b on b.id=a.personne_ID
    Après tu peux ajouter la clause where en fonction de tes paramètres envoyés par ton écran

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where A.ID= parametre_soirée OR B.ID=parametre_user
    Attention, c'est juste à titre indicatif. En effet, par exemple, le mot USER est réservé, tu ne pourras pas appeler ta table comme ça.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Comme l'ont dit CinePhil et Olivier, il faut que tu nous donnes la requête que tu as utilisé.

    À première vue, il me semble que la colonne personne dans la table soirée est une clé étrangère qui pointe vers Id de la table User, si c'est le cas je pense que tu as mal conçu ta base de données.

    J'imagine ton MCD comme suit :
    User (0,n) ------- participer ------- (1,1) Soirée

    Je traduis :
    "Une personne peut participer dans plusieurs soirées, et Une soirée ne peut avoir qu'une seule personne"

    Mais le fait que tu obtiens un résultat avec les Id des personnes participants à une seule soirée montre que mon hypothèse est fausse.

    Cependant, cela n'explique pas le fait d'avoir une clé etrangère qui pointe vers User(Id) dans la table soirée, à moins que ce champ ne représente pas une clé étrangère, dans ce cas je crois qu'il serait convenable que tu nous donnes plus de détails.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut merci
    je mettrais ma requête dès ce soir, je suis au boulot là (je suis juste venu voir).. mais dès ce soir, je vous balance ma requête, à ce que je peux voir dans vos réponses, ça me semble une solution correcte, il me manque le lien entre les tables et l'id.

    Merci pour votre rapidité et de vos réponse.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut requete
    voilà la requete, en esperant qu'elle soit claire, mais avec des pros comme vous, je me dis qu'il ne doit pas y avoir de problème..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t_soiree.date, t_soiree.type, t_soiree.personnes, t_soiree.titre AS user 
    FROM t_soiree 
    LEFT JOIN t_user ON t_soiree.user = t_user.id 
    ORDER BY `date` DESC"
    encore merci

  8. #8
    Membre habitué
    Homme Profil pro
    Data Ingenieur
    Inscrit en
    Mai 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Data Ingenieur
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2006
    Messages : 133
    Points : 162
    Points
    162
    Par défaut
    tu es sur de ta requête ?

    tu fais une jointure ouverte avec la table T_USER mais tu ne l'utilises pas dans ton select, c'est normal ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut requete
    j'ai essayé vos conseils, alors ça fonctionne, mais cela ne me donne que le premier enregistrement,

    1,2,3
    j'ai que le 1 qui va rechercher le bon nom de personne, le 2 et 3 ne sont pas présents

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par jeromeb66 Voir le message
    voilà la requete, en esperant qu'elle soit claire, mais avec des pros comme vous, je me dis qu'il ne doit pas y avoir de problème..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t_soiree.date, t_soiree.type, t_soiree.personnes, t_soiree.titre AS user 
    FROM t_soiree 
    LEFT JOIN t_user ON t_soiree.user = t_user.id 
    ORDER BY `date` DESC"
    encore merci
    Je pense que t'as voulu écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t_soiree.date, t_soiree.type, t_soiree.titre, t_soiree.personnes AS user 
    FROM t_soiree 
    LEFT JOIN t_user ON t_soiree.user = t_user.id 
    ORDER BY `date` DESC"
    En principe ça devrait marcher, mais comme j'ai dit dans mon post précédent, il ya quelques ambiguïtés dans ton MLD.
    Pouvez-vous illustrer par un simple exemple les données de la table soirée?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut ok
    merci pour les réponses, j'étais un peu en vacances, je n'ai pas eu le temps de vous répondre...

    Alors la requête fonctionne bien, par contre, cela m'affiche uniquement le premier user qui est dans mon champ.

    les données de ma table soirée:
    id (1) de type INT
    date (16.02.2010) de type DATE
    type (anniversaire) de type TEXT
    id_personnes (1,2,3) de type TEXT


    les données de la table user (je l'ai renommé pour ne pas avoir user, mais pour l'exemple je garde user) :

    id (1)/pseudo (nom1)
    id (2)/pseudo (nom2)
    id (3)/pseudo (nom3)


    et le résultat que j'aimerais avoir à l'écran est :
    Anniversaire du 16.02.2010 : personnes présentes : Nom1 / Nom2 / Nom3


    et actuellement avec la requête, j'ai comme résultat :
    Anniversaire du 16.02.2010 : personnes présentent : Nom1 (il me met que le premier nom)..

    Comment puis-je faire pour qu'il lise le champ id_personnes et qu'il me remplace 1,2,3 par Nom1, Nom2, Nom3 ?

    merci d'avance

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    recherchez le mot clef pivot + le nom de votre SGBDD sur google.

    Ensuite revenez avec vos essais + problèmes rencontrés (et précisez votre SGBD le cas échéant)

  13. #13
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Présente tes données en colonnes parce que là j'ai un gros doute avec ce que tu nous présentes :
    Citation Envoyé par jeromeb66
    id_personnes (1,2,3) de type TEXT
    Rassure-nous : tu n'as pas une seule ligne avec tous les id_personnes mais une ligne par id_personne ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut fichier joint
    Alors, je ne vais pas vous rassurer je crois, mais en effet tout mes id user sont dans le même champ (on m'avait conseillé de faire comme cela). Je vous ai mis en pièce joint un pdf pour un peu expliquer le système.

    J'ai une table qui répertorie toute les soirée faites. Il va chercher les jeux joués dans la table JEUX et les personnes dans la table PERSONNES.

    Mais à ce que vous me dîtes, je suis très mal barré au niveau de la structure des mes bases. J'ai un peu du mal à comprendre comment procéder. Vous me dîtes de faire un ligne par Id personnes, donc quand j'insère une soirée et qu'il y a 10 personnes, dans la table soirée il devrait avoir 10 ligne, c'est bien ça ?

    Donc une table JEUX, une table PERSONNES et une table entre les deux qui vient récupérer les infos des 2 autres tables ?
    Images attachées Images attachées

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    oula,

    oui celui qui vous a conseillé ça.. ne l'écoutez plus

    Si votre projet n'est pas trop avancé un petit tour par la case modélisation serait, je penses, une bonne idée.

    En gros, fsmrel me corrigera peut-être, voici une structure un peu plus adéquate à votre besoin (il faudra la développer avec vos besoin réel) :

    MCD :
    Personne 0,n ----- participe ----- 0,n Soirée
    Soirée 1,1 -------possède------ 0,n Jeux

    La relation entre soirée et jeux peut-être 1,n je ne sais pas si vous pouvez avoir plusieurs activité ou non durant une soirée.

    Du coup quand on passe au MPD :
    T_PERSONNE_PER (PER_ID, ...)
    T_SOIREE_SOI (SOI_ID, JEU_ID (fk), .....)
    R_PER_SOI (PER_ID, SOI_ID, ....)
    T_JEUX_JEU (JEU_ID, ....)


    Votre "table de jointure" qui est une relation est donc la table R_PER_SOI.
    Elle vous permettra de gérer indépendamment les soirées, et les personnes y participant.


    Dans le cas où vous avez une relation 1,n entre Soirée et Jeux il vous faudra une autre table de relation entre ces deux tables .. voire une 3eme pour savoir qui participe à quoi.

    Bref à développer avec votre besoin réel !

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut ok
    ok, je crois que vais partir sur cette solution, elle me semble plus correcte. Je vais oublier les id dans 1 champ (et taper sur les doigts de celui qui m'a montré comment faire ça, pourtant il m'avait assuré que c'était la bonne solution ).

    Encore merci de votre aide, super sympa, je vais essayer de ne pas trop vous embêter..

  17. #17
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    présentez votre projet actuel ici : http://www.developpez.net/forums/f62...sation/schema/

    et développez correctement votre besoin et votre existant !


    Si vous partez pour refaire une partie de votre projet faites le correctement

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

Discussions similaires

  1. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  2. problème de requête SQL sur 3 tables pour un while
    Par carmen256 dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/04/2006, 16h55
  3. requêtes sql sur plusieurs tables
    Par zahiton dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/11/2005, 10h59
  4. [SQL] requêtes SQL sur plusieurs tables
    Par zahiton dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/11/2005, 16h32
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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