Difficultés Mysql

Difficultés Mysql - PHP - Programmation

Marsh Posté le 24-10-2012 à 16:38:06    

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
Reply

Marsh Posté le 24-10-2012 à 16:38:06   

Reply

Marsh Posté le 24-10-2012 à 16:45:11    

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

Reply

Marsh Posté le 24-10-2012 à 16:46:22    

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
Reply

Marsh Posté le 24-10-2012 à 17:31:02    

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.

Reply

Marsh Posté le 26-10-2012 à 20:33:30    

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
Reply

Marsh Posté le 27-10-2012 à 10:18:17    

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 !
 

Reply

Marsh Posté le 27-10-2012 à 18:37:42    

Merci beaucoup Farian, ça fonctionne nickel ;-)

Reply

Marsh Posté le 29-10-2012 à 09:14:08    

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).

Reply

Marsh Posté le 30-10-2012 à 10:55:38    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed