Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/07/2011, 15h12   #1
Invité de passage
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 4
Points : 4
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..
jeromeb66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 16h05   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
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 ?
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 16h05   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/07/2011, 10h02   #4
Membre habitué
 
Homme Gaëtan
Développeur Oracle
Inscription : mai 2006
Messages : 117
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations professionnelles :
Activité : Développeur Oracle
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 117
Points : 115
Points : 115
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 :
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 :
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.
attila771 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/07/2011, 10h14   #5
Candidat au titre de Membre du Club
 
Homme Black Lagoon
Étudiant
Inscription : mai 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Black Lagoon
Âge : 24
Localisation : Espagne

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 15
Points : 14
Points : 14
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.
Black Lagoon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 10h32   #6
Invité de passage
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 4
Points : 4
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.
jeromeb66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 16h47   #7
Invité de passage
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 4
Points : 4
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 :
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
jeromeb66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 17h11   #8
Membre habitué
 
Homme Gaëtan
Développeur Oracle
Inscription : mai 2006
Messages : 117
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations professionnelles :
Activité : Développeur Oracle
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 117
Points : 115
Points : 115
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 ?
attila771 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 17h17   #9
Invité de passage
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 4
Points : 4
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
jeromeb66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 23h11   #10
Candidat au titre de Membre du Club
 
Homme Black Lagoon
Étudiant
Inscription : mai 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Black Lagoon
Âge : 24
Localisation : Espagne

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 15
Points : 14
Points : 14
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 :
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 :
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?
Black Lagoon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 10h49   #11
Invité de passage
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 4
Points : 4
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
jeromeb66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 11h01   #12
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
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)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 20h50   #13
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 10h01   #14
Invité de passage
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 4
Points : 4
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 ?
Fichiers attachés
Type de fichier : pdf table.pdf (33,8 Ko, 10 affichages)
jeromeb66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 10h10   #15
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
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 !
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 10h26   #16
Invité de passage
 
Inscription : février 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 21
Points : 4
Points : 4
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..
jeromeb66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 10h47   #17
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
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
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h31.


 
 
 
 
Partenaires

Hébergement Web