Aide pour structurer requette sql
zory
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai besoin d'un conseil pour structurer une base de données. et pour écrire du coup la requette associée
Voici mon probleme :
J'ai la table "utilisateur" structurée ainsi :
userid int
membername varchar 50
login varchar 50
pwd varchar 50
chaque utilisateur effectue un des cours de la table "cours"
courid int
nomcours varchar50
pour chaque cours je dois enregistrer un temps de suivis donc la table "duree"
userid int
coursid int
temps int
Pour le moment j'ai deux cours, puisque je ne sais pas faire la requette comme il faut j'ai triché en ajoutant a la table utilisateur deux colone de plus, elle ressemble à ca :
userid int
membername varchar 50
login varchar 50
pwd varchar 50
totaltempscours1 int
totaltempscours2 int
ca me fait une requette assez simple pour obtenir un résultat tel que ceci :
userid, membername, nomcours1, totaltempscours1, nomcours2, totaltempscours2
mais je vais pas pouvoir tricher ainsi trop longtemps car quand j'aurai 20 cours ou 100 cours ca va etre compliqué et pas propre.
Pouvez vous m'aider à écrire la requette pour que je puisse récupérer ajouter au bout de ma requette select pour les utilisateur les cours bout a bout tel que ceci
userid, membername, nomcours1, totaltempscours1, nomcours2, totaltempscours2, nomcousX, tempscoursX, ...etc
Voici un jeu de données. la subtilité est sur la table duree ou il peut y avoir plusieurs enregistrement concernant un utilisateur et la durée. Je dois ressortir le total temps.
utilisateur
1 toto ***@*** motdepasse
2 titi ***@*** passw1
cours
1 anglais n1
2 anglais n2
3 allemand n1
4 allemand n2
duree
1 1 67
1 1 77
1 1 188
1 2 221
1 2 111
Je bloque depuis plusieurs jours sur ce point. Merci de votre aide précisues.
Zory
J'ai besoin d'un conseil pour structurer une base de données. et pour écrire du coup la requette associée
Voici mon probleme :
J'ai la table "utilisateur" structurée ainsi :
userid int
membername varchar 50
login varchar 50
pwd varchar 50
chaque utilisateur effectue un des cours de la table "cours"
courid int
nomcours varchar50
pour chaque cours je dois enregistrer un temps de suivis donc la table "duree"
userid int
coursid int
temps int
Pour le moment j'ai deux cours, puisque je ne sais pas faire la requette comme il faut j'ai triché en ajoutant a la table utilisateur deux colone de plus, elle ressemble à ca :
userid int
membername varchar 50
login varchar 50
pwd varchar 50
totaltempscours1 int
totaltempscours2 int
ca me fait une requette assez simple pour obtenir un résultat tel que ceci :
userid, membername, nomcours1, totaltempscours1, nomcours2, totaltempscours2
mais je vais pas pouvoir tricher ainsi trop longtemps car quand j'aurai 20 cours ou 100 cours ca va etre compliqué et pas propre.
Pouvez vous m'aider à écrire la requette pour que je puisse récupérer ajouter au bout de ma requette select pour les utilisateur les cours bout a bout tel que ceci
userid, membername, nomcours1, totaltempscours1, nomcours2, totaltempscours2, nomcousX, tempscoursX, ...etc
Voici un jeu de données. la subtilité est sur la table duree ou il peut y avoir plusieurs enregistrement concernant un utilisateur et la durée. Je dois ressortir le total temps.
utilisateur
1 toto ***@*** motdepasse
2 titi ***@*** passw1
cours
1 anglais n1
2 anglais n2
3 allemand n1
4 allemand n2
duree
1 1 67
1 1 77
1 1 188
1 2 221
1 2 111
Je bloque depuis plusieurs jours sur ce point. Merci de votre aide précisues.
Zory
A voir également:
- Aide pour structurer requette sql
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Jointure sql ✓ - Forum MySQL
- Requête sql pour afficher uniquement les fleurs dont le prix est strictement inférieur à 10 euros - Forum calculatrices
- Cherche des haricot vendez les moi ✓ - Forum DS
4 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour.
Je propose ceci, qui ne fait pas exactement ce que tu demandes:
Je propose ceci, qui ne fait pas exactement ce que tu demandes:
select utilisateur.userid, membername, nomcours, sum(temps) as totaltempscours from utilisateur, cours, duree where duree.userid = utilisateur.userid and cours.coursid = duree.coursid group by utilisateur.userid, membername, nomcours order by membername,noncours
Bonjour,
Tu ne pourras pas récupérer les données exactement comme tu le souhaites (de façon totalement automatique...)
Par contre... tu peux récupérer les données facilement exploitables en utilisant une requête du genre :
Il est assez aisé par la suite de manipuler le résultat de cette requête pour l'afficher sous la forme que tu le souhaites dans ton programme....
NB : Pour faire des tests... réalise les DIRECTEMENT dans ta BDD et non via des lignes de code dans ton programme....
Tu ne pourras pas récupérer les données exactement comme tu le souhaites (de façon totalement automatique...)
Par contre... tu peux récupérer les données facilement exploitables en utilisant une requête du genre :
SELECT SUM(D.temps) as TMP , C.nomcours , U.* FROM duree D LEFT JOIN utilisateur U ON U.userid = D.userid LEFT JOIN cours C ON C.courid = D.courid GROUP BY U.userid,C.courid
Il est assez aisé par la suite de manipuler le résultat de cette requête pour l'afficher sous la forme que tu le souhaites dans ton programme....
NB : Pour faire des tests... réalise les DIRECTEMENT dans ta BDD et non via des lignes de code dans ton programme....
Bonjour,
Merci de votre participation messieurs, par contre Jordane, n'est il vraiment pas possible d'ajouter horizontalement dynamiquement les valeurs ? ca me faciliterai extraordinairement les choses ...
Merci de votre aide.
Merci de votre participation messieurs, par contre Jordane, n'est il vraiment pas possible d'ajouter horizontalement dynamiquement les valeurs ? ca me faciliterai extraordinairement les choses ...
Merci de votre aide.
Les requêtes SQL ne permettent pas d'ajouter horizontalement dynamiquement les valeurs. Cependant, c'est assez simple à faire par programme, et j'imagine que tu vas avoir besoin de l'un ou l'autre programme.
Qu'as-tu autour de ta base de données : un site web, des documents Office, ...?
Que produis-tu : des rapports imprimés, des fichiers, des mail, ...?
Qu'as-tu autour de ta base de données : un site web, des documents Office, ...?
Que produis-tu : des rapports imprimés, des fichiers, des mail, ...?
Je génère des rapports avec du PHP, c'est des statistiques, et j'essaye de rendre mes rapports le plus flexible possible.
je vais essayer de me débrouiller !
Merci de ton aide.
je vais essayer de me débrouiller !
Merci de ton aide.
Suggestion pour PHP:
1) faire la requête
2) faire une boucle pour chacun des enregistrements dans la réponse à cette requête
3) pour chacun des userid, faire la requête
4) afficher les enregistrements obtenu par la seconde requête, tous sur une seule ligne.
1) faire la requête
select userid, membername from utilisateur
2) faire une boucle pour chacun des enregistrements dans la réponse à cette requête
3) pour chacun des userid, faire la requête
select nomcours, sum(temps) as totaltempscours from cours, duree where duree.userid = <le userid obtenu dans la requête précédente> and cours.coursid = duree.coursid group by nomcours order by noncours
4) afficher les enregistrements obtenu par la seconde requête, tous sur une seule ligne.