Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3098 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Difficultés Mysql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Difficultés Mysql

n°2161249
francois55
Posté le 24-10-2012 à 16:38:06  profilanswer
 

Bonjour,
 
Je suis débutant en PHP/MYSQL et je m'attaque aux jointures, mais là avec trois tables, je bloque..
Si quelqu'un pouvait m'aider, ce serait vraiment sympa  ;)  
 
J'ai créé une base SQL avec trois tables  
 
formation
| id | titre | duree | info |
 
eleve
| id | nom | prenom | groupe |
 
presence
| id | id_formation | id_eleve | date |
 
 
Objectif: répertorier les présences à des formations.
 
Ensuite, je bloque sur la requête qui fait la correlation entre id_formation et formation.id  ainsi que id_eleve et eleve.id
 
Le but étant finalement d'afficher le nom + le prénom et la date des différents élèves qui ont suivi la formation X.
 
Merci d'avance pour votre aide.
François


Message édité par francois55 le 27-10-2012 à 07:00:19
mood
Publicité
Posté le 24-10-2012 à 16:38:06  profilanswer
 

n°2161252
yellu
Posté le 24-10-2012 à 16:45:11  profilanswer
 

Salut,
 
SELECT e.nom, e.prenom, p.date, f.titre
FROM eleve e
INNER JOIN presence p ON p.id_eleve = e.id_eleve
INNER JOIN formation f ON f.id_formation = p.id_formation
 
Sinon c'est plutôt cat SQL

n°2161253
Squall421
Don't Panic !
Posté le 24-10-2012 à 16:46:22  profilanswer
 

Code :
  1. SELECT nom, prenom, groupe FROM eleve E
  2. JOIN presence P ON P.id_eleve = E.id
  3. JOIN formation F ON F.id = P.id_formation
  4. WHERE P.id_formation = X
 

Ensuite tu récupères tous les champs que tu veux tranquillement.

 


yellu a écrit :

Salut,

 

SELECT e.nom, e.prenom, p.date, f.titre
FROM eleve e
INNER JOIN presence p ON p.id_eleve = e.id_eleve
INNER JOIN formation f ON f.id_formation = p.id_formation

 

Sinon c'est plutôt cat SQL

 

Grilled.

 

Sinon e.id_eleve n'existe pas.
Mais j'avoue qu'intuitivement, j'ai fait la même chose que toi.

 

Ce serait mieux dans tes tables d'avoir le nom des id, genre :
"id_eleve"
"id_formation" au lieu de "id" tout simple, c'est plus clair.


Message édité par Squall421 le 24-10-2012 à 16:48:36
n°2161264
francois55
Posté le 24-10-2012 à 17:31:02  profilanswer
 

J'ai suivi vos conseilles et j'ai renommé les id, maintenant tout fonctionne parfaitement grâce à vous  ;)  
Un tout grand merci pour votre aide.

n°2161595
francois55
Posté le 26-10-2012 à 20:33:30  profilanswer
 

Bonsoir à tous,

 

Je reviens vers vous avec un nouveau souci, voilà dans le champ id_eleve de la table présence, je place plusieurs id séparés par des virgules (ex: 12,25,32).

 

Pour afficher toutes les formations suivies par un élève, j'utilise WHERE FIND_IN_SET('$id',P.id_eleve) ORDER BY date ASC

 

Mais là où je bloque, c'est lorsque je veux afficher tous les élèves présents aux cours, pour l'instant la fonction est ok s'il n'y a qu'un id_eleve (ou le premier id).

 

$sql ="SELECT nom, prenom, groupe, date, titre FROM eleve E
JOIN presence P ON P.id_eleve = E.id_eleve
JOIN formation F ON F.id_formation = P.id_formation
WHERE P.id_formation = '$id_formation' ORDER BY groupe ASC";

 

Comment puis-je la modifier ?

 

Merci d'avance,
François

 



Message édité par francois55 le 26-10-2012 à 21:09:50
n°2161619
Farian
Posté le 27-10-2012 à 10:18:17  profilanswer
 

Bonjour !
 
J'ai plus l'habitude de faire des jointures implicites, sans mot-clé "JOIN", et la requête pourrait être écrite comme ça :  
 

Select e.nom, e.prenom, e.groupe p.date, f.titre
from eleve e, presence p, formation f
where p.id_formation = "$id_formation"
and FIND_IN_SET(e.id, p.id)
and f.id_formation = p.id_formation  
order by groupe ASC


 
Aux erreurs de frappe près (je n'ai pas de base mysql sous la main pour vérifier la requête), l'important c'est l'idée :)
 
Bon courage !
 

n°2161666
francois55
Posté le 27-10-2012 à 18:37:42  profilanswer
 

Merci beaucoup Farian, ça fonctionne nickel ;-)

n°2161809
yellu
Posté le 29-10-2012 à 09:14:08  profilanswer
 

Re-salut !
 
Pourquoi stockes-tu plusieurs "id_eleve" dans ce champs ?
 
Ta modélisation de table te permettrait pourtant de garder une granularité (1 eleve / 1 formation) dans la table des présences.
 
J'ai peur que tu n'ai choisis cette solution en raison de tes difficultés de requétage (connaissance du GROUP BY et du LEFT JOIN notamment).

n°2161942
francois55
Posté le 30-10-2012 à 10:55:38  profilanswer
 

Bonjour Yellu,
 
C'était pour avoir une entrée dans la table pour 10 élèves présents à la formation.  
Maintenant, si je ne risque pas de charger la base, un élève, une formation c'est OK pour moi  :)  
 
Merci,
François
 
 


Message édité par francois55 le 30-10-2012 à 10:58:11

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Difficultés Mysql

 

Sujets relatifs
[Résolu] Besoin petite aide sql (jointures)Copier/coller tables SQL de même structure
Question d'architecture (decouper ses tables au maximum ?)problemes tables messages
[SQL] Fusionner 2 champs de 2 tables différentes [résolu][Oracle 11g] Deplacer mes tables dans un autre schema/tablespace
Automatiser le remplissage des tablesEnregistrer formulaires dans 2 tables mysql
Trouver valeurs ne se trouvant pas dans deux tablescréer un tableau php avec tri et plusieurs tables...
Plus de sujets relatifs à : Difficultés Mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR