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

Langage SQL Discussion :

est-ce possible à faire une requête ?


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 433
    Points : 881
    Points
    881
    Par défaut est-ce possible à faire une requête ?
    Bonjour,

    je me trouve face à un challenge ou à une impossibilité (plusieurs avis seraient intéressants).
    Mon objectif est (via une requête SQL) de trouver des événements qui sont superposés. Pour chaque événement, on a une liste de dates et une liste d'employés positionnés.

    voilà la structure de la table :

    even_id (entier)
    even_dates (chaine contenant par exemple: 2009-08-06#2009-08-07)
    even_pers (chaine contenant par exemple: 1,3,8,9 ) chaque numéro est un employé

    donc concrètement j'aimerai trouvé les id des événements dont un employés et positionnés à un jour sur un autre événement !

    alors, possible ou pas en SQL ?

    pas facile...

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Michael REMY Voir le message
    even_dates (chaine contenant par exemple: 2009-08-06#2009-08-07)
    Il s'agit de la date de début et de la date de fin ?
    Il n'y a toujours que ces deux dates ?
    Ce n'est pas une modélisation normalisée ça ! Pourquoi ne pas avoir fait deux colonnes DateDebut et DateFin ?

    even_pers (chaine contenant par exemple: 1,3,8,9 ) chaque numéro est un employé
    Ca non plus ce n'est pas normalisé !
    Normalement, il devrait y avoir l'association :
    Employé -0,n----Participer----0,n- Evénement

    Et donc une table associative entre Employe et Evenement contenant l'identifiant de l'événement et l'identification de l'employé.

    j'aimerai trouvé les id des événements dont un employés et positionnés à un jour sur un autre événement !

    alors, possible ou pas en SQL ?

    pas facile...
    Pas facile surtout avec un tel modèle de données non normalisé !

    En gros dans votre requête il faut :
    - extraire la date de début et la date de fin des événements pour vérifier si la période de l'événement d'un employé se chevauche avec la période d'un autre événement auquel participe ce même employé. Ca déjà c'est costaud et selon votre SGBD ce sera plus ou moins facile car tous n'ont pas les fonctions adéquates pour vérifier les chevauchements de période.
    - restreindre les événement en cherchant l'identifiant de l'employé dans une chaîne de texte, donc avec un LIKE, ce qui n'est pas du tout optimum car adieu l'index !

    Bref, s'il n'est pas trop tard pour changer la structure de la base de données, je vous encourage fortement à le faire.

  3. #3
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 433
    Points : 881
    Points
    881
    Par défaut
    il y a aussi une date de début et une date de fin mais elles ne servent à rien car il y a aussi une fréquence. Dans le champs liste_dates, il ya toutes les dates des formations.

    il y a aussi une autre table (ressources) comprenant un tuple par personnes.

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Comme vous l'a conseillé Cinéphile, revoyez votre modele de données, car il vous menera tout droit dans le mur.

    Bon courage

  5. #5
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 433
    Points : 881
    Points
    881
    Par défaut
    je n'ai pas le choix du modèle de données, on me transmet les relations/tables, je dois faire avec :

    table evenenments :
    even_id (entier)
    even_date_debut (une date au format YYYY-MM-DD)
    even_date_fin (une date au format YYYY-MM-DD)
    even_recurrence (une chaine indiquant la régularité, ou pas de la période)
    even_dates (chaine contenant par exemple: 2009-08-06#2009-08-07)
    even_pers (chaine contenant par exemple: 1,3,8,9 ) chaque numéro est un employé

    table participations :
    part_id
    part_id_even
    part_id_personne
    part_specification

  6. #6
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Citation Envoyé par Michael REMY Voir le message
    je n'ai pas le choix du modèle de données, on me transmet les relations/tables, je dois faire avec :
    Alors répondez aux personnes qui vous transmettent la base de données que le modèle est mauvais! C'est toujours le même problème : des personnes qui n'y connaissent rien font n'importe quoi et on ne leur dit rien, au contraire, on tente de contorsionner des requêtes SQL pour ne pas froisser la susceptibilité de ces incapables!

    DBA, c'est un métier!

    Vous pouvez aussi intégrer les données dans un modèle correct à l'aide de procédures stockées.

  7. #7
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Je vois que les colonnes que j'ai suggérées sont présentes, ainsi que la table des participations. On progresse !
    On va donc pouvoir faire des jointures pour trouver la personne qui participe ; voilà une difficulté qui s'amenuise.

    Question :
    Vous dites qu'il y a une notion de périodicité en plus des dates de début et de fin.
    Cela veut-il dire :
    1) Que les dates de début et de fin sont celles de la première occurrence de l'événement et qu'ensuite le logiciel calcule avec la périodicité ?
    2) Que les dates de début et de fin sont celles de la période totale durant laquelle l'événement se répète ?

    Dans les deux cas il manquerait peut-être encore des informations.

    Avec un exemple de jeu de données de ces tables, ça nous aiderait à vous aider.

  8. #8
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Le SGBD ?

Discussions similaires

  1. Est-ce possible en une seule requête ?
    Par pc75 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/09/2013, 10h08
  2. Est-il possible de faire une requête hiérarchique ?
    Par Christophe Charron dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 21/03/2007, 15h32
  3. C'est possible dans une requête SELECT ?
    Par Kokito dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/04/2005, 17h59
  4. [Requête] Faire une requête imbriquée?
    Par sekiryou dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2004, 23h52

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