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

Bases de données Delphi Discussion :

Problème avec SQL


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut Problème avec SQL
    Bonjour,
    je suis débutant en Sql et je me demande s'il ya une solution pour le problème suivant :

    On a la table notes: Note (id_eleve, id_epreuve, note)

    Pour afficher les notes des élèves pour une épreuve donnée, y pas de problème :

    select * from note where id_epreuve=2 (par exemple)
    Maintenant, il est demandé d'afficher les notes de tout les élèves pour deux épreuves sous la forme :


    Merci de votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Salut;

    avec le peu de détail fourni je crois qu'il s'agit de deux tables (Eleves et Epreuves) avec ID_Eleve comme clé étrangère dans la table Epreuve, avec ces suppositions la requête suivante répond entièrement à ton souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select el.Id_Eleve, el.nom_Eleve, ep.Epreuve1, ep.Epreuve2 
    From el Eleves, ep Epreuves
    Where el.ID_Eleve = ep.ID_Eleve
    je crois que c'est tout

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 722
    Billets dans le blog
    65
    Par défaut
    J'en suis moins sûr que toi Just-Soft, la logique reste respectée si on à un table éleve et un table notes comme indiquée

    On a la table notes: Note (id_eleve, id_epreuve, note)
    La bonne question est plutôt quel type de BDD et quelle version . En effet si sous Firebird 2.1 je serais capable de répondre à la question en un SQL j'en serais par contre incapable sans passer par un table temporaire avec Paradox ou une version de Firebird < 2 .
    Nota ! je ne cite que ces deux "BDD" pour exemple

  4. #4
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    J'en suis moins sûr que toi Just-Soft, la logique reste respectée si on à un table éleve et un table notes comme indiquée
    +1
    regarde du côter des jointures

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 722
    Billets dans le blog
    65
    Par défaut
    non , la jointure ne peut pas répondre à la question, seul un équivalent de LIST (firebird 2) apporterai une solution durable car je présume que par la suite il y aura plus de 2 épreuves

  6. #6
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    En effet si sous Firebird 2.1 je serais capable de répondre à la question en un SQL j'en serais par contre incapable sans passer par un table temporaire avec Paradox ou une version de Firebird < 2 .
    Merci Just-Soft..voila la table épreuve : epreuve(id,designation)

    Merci SergioMaster, il s'agit plutôt d'un...si on peut dire un genre d'exercice..pour l'application j'utilise Mysql....et je suis très intéressé par votre repense..car oui je pense qu'il faut passer de quelque chose de temporaire (views ou autres).

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 722
    Billets dans le blog
    65
    Par défaut
    pour le quelque chose de temporaire
    moi j'utilise simplement une table mémoire (composant KBMemTable) . Une view n'apporterai rien car toujours le problème du SQL

  8. #8
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    moi j'utilise simplement une table mémoire (composant KBMemTable)
    ou le nouveau composant de Franck Soriano

  9. #9
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    moi j'utilise simplement une table mémoire (composant KBMemTable) . Une view n'apporterai rien car toujours le problème du SQL
    Donc..est-ce que peut-on déduire que le coté conceptuel de la bdd est erroné?

  10. #10
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut

    Citation Envoyé par sandokhane Voir le message
    Donc..est-ce que peut-on déduire que le coté conceptuel de la bdd est erroné?
    selon moi non, c'est juste que tu veux mélanger SQL et affichage des données, or le SQL n'est pas fait pour cela.
    en fait, ce que tu désire c'est un affichage croisé entre les élèves et les épreuves. il existe des composants de type cube ou pivot dédiés à cet usage (je ne me rappelle plus des noms ).

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 722
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par sandokhane Voir le message
    Donc..est-ce que peut-on déduire que le coté conceptuel de la bdd est erroné?
    Non absolument pas , au contraire .
    Dans mon idée au cours d'une année on va avoir un certain nombre d'épeuves dont à priori on ne connait pas le nombre donc on ne peut pas faire une table contenant , disons , une ligne (row) par éléves , contenant un nombre non défini de colonnes (epreuves) (bon à la réflexion on pourrait en utilisant un array mais toutes les BDD ne le permettent pas et le array devrait quand même avoir un nombre fini)
    Non le coté conceptuel est correct (de mon point de vue) c'est simplement que la fonction SQL certainement d'une norme récente (LIST ou équivalent) n'est pas implémentée dans toutes les BDD.

    Ceci étant posé , il y a quand même des moyens pour contourner ces difficultés .

  12. #12
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Normalement l'onglet Decision Cube est là pour ça. (Par contre prévoir des modifications du code source pour le rendre compatible non BDE, en tout cas sous delphi 7).

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 722
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Normalement l'onglet Decision Cube est là pour ça. (Par contre prévoir des modifications du code source pour le rendre compatible non BDE, en tout cas sous delphi 7).
    pour moi qui n'ai eu jusqu'à présent que des versions pro décision cube est un composant sur papier . On fait ce que l'on peut avec ce que l'on a

  14. #14
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Rah désolé, j'avais oublié les différences entre les verisons, je suis avec la version Entreprise.

    Edit: j'ai vu un Decision Cube gratuit mais je n'ai pas le temps de le tester, le developpement a été arrêté en 2004.
    http://sourceforge.net/projects/fxds/

  15. #15
    Membre éprouvé
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Par défaut
    Yo !

    si le nombre d'épreuves est défini, et que tu connais leurs id dans la table des epreuves, tu peux faire un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select t1.nom_eleve, 
           if(id_epreuve=1,t2.note,null) as Epreuve1,
           if(id_epreuve=2,t2.note,null) as Epreuve2
    from eleves t1, notes t2 
    where (T2.id_eleve=t1.id_eleve) 
    order by t1.nom_eleve
    pour rappel avec MySql (également avec SqlServer) la fonction "IF"

    IF(EXP1,EXP2,EXP3)

    Si EXP1 est VRAI, IF retourne EXP2, sinon IF retourne EXP3

    EXP1 est de type LOGIQUE
    EXP2, EXP3 sont de type CHAINE ou NUMERIQUE

    Le Lézard.

  16. #16
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Citation Envoyé par Le Lézard Voir le message
    Yo !

    si le nombre d'épreuves est défini, et que tu connais leurs id dans la table des epreuves, tu peux faire un truc comme ça :

    Le Lézard.
    Merci tout le monde.

    Pour le Lézard ...voilà le résultat..ça marche et ça marche pas

  17. #17
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    à tester
    select N.id_eleve, N.note,NN.note from note N join note nn on N.id_eleve=nn.id_eleve
    where n.id_epreuve=1 and nn.id_epreuve=2

  18. #18
    Membre éprouvé
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Par défaut
    Citation Envoyé par sandokhane Voir le message
    Merci tout le monde.

    Pour le Lézard ...voilà le résultat..ça marche et ça marche pas
    Voilà, avec ça, ça devrait le faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select t1.nom_eleve, 
           sum(if(id_epreuve=1,t2.note,null)) as Epreuve1,
           sum(if(id_epreuve=2,t2.note,null)) as Epreuve2
    from eleves t1, notes t2 
    where (T2.id_eleve=t1.id_eleve) 
    group by t1.nom_eleve 
    order by t1.nom_eleve

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/05/2007, 17h43
  2. problème avec sql designer
    Par artotal dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/08/2006, 17h57
  3. Problèm avec SQL*LOADER
    Par logicave dans le forum Oracle
    Réponses: 2
    Dernier message: 14/07/2006, 18h55
  4. Quelques problèmes avec SQL SERVEUR (LIKE et caractères)
    Par poussinphp dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/09/2005, 10h43
  5. (jsp) problème avec sql qui contient la date
    Par future dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 31/08/2005, 17h18

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