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 :

symptome de la boucle infinie dans une requete


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 53
    Points : 50
    Points
    50
    Par défaut symptome de la boucle infinie dans une requete
    Bonjour,

    J'essaye d'écrire une requete SQL, mais elle me plante Access à chaque foi, le CPU restant bloqué à 100% ...

    Ca me rapelle les boucles infines en prog !

    Pourriez vous m'aider à débeugger cette requete ?

    Je gère un planning. les séances sont plannifiées de la sorte qu'on sait que la séance du lundi 18h pour l'activité 1 et la saison 5 va de telle semaine à telle autre.

    Le pb, c'est que les saisons sont à cheval sur 2 ans ... donc je me rettrouve avec des séances qui commencent semaine 24 et qui finissement semaine 3 !

    Et en fait je dois afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JOUR | HEURE | DEBUT | FIN
    Lundi | 15h00  |  24      |  3
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JOUR | HEURE | DEBUT | FIN
    Lundi | 15h00  |  1      |  52
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    SELECT JOU_nom, P1.PLA_heure_seance, P1.PLA_semaine, P2.PLA_semaine
    FROM PLANNING AS P1, PLANNING AS P2, JOURS
    WHERE P1.PLA_activite=1 And P1.PLA_saison=Forms!MenuPrincipal!cmb_saison.value And P1.PLA_jour_seance=JOU_id
    AND P1.PLA_semaine=(SELECT PLA_semaine
                                          FROM PLANNING
                                          WHERE PLA_jour_seance=P1.PLA_jour_seance
                                          AND PLA_heure_seance=P1.PLA_heure_seance
                                          AND PLA_saison=Forms!MenuPrincipal!cmb_saison.value
                                          AND PLA_activite=1
                                          AND PLA_id=(SELECT min(PLA_id) FROM PLANNING
                                                                                WHERE PLA_jour_seance=P1.PLA_jour_seance
                                                                                AND PLA_heure_seance=P1.PLA_heure_seance
                                                                                AND PLA_saison=Forms!MenuPrincipal!cmb_saison.value
                                                                                AND PLA_activite=1
                                                                )
                                          )
    AND P2.PLA_semaine=(SELECT PLA_semaine
                                          FROM PLANNING
                                          WHERE PLA_jour_seance=P2.PLA_jour_seance
                                          AND PLA_heure_seance=P2.PLA_heure_seance
                                          AND PLA_saison=Forms!MenuPrincipal!cmb_saison.value
                                          AND PLA_activite=1
                                          AND PLA_id=(SELECT max(PLA_id) FROM PLANNING
                                                                                WHERE PLA_jour_seance=P2.PLA_jour_seance
                                                                                AND PLA_heure_seance=P2.PLA_heure_seance
                                                                                AND PLA_saison=Forms!MenuPrincipal!cmb_saison.value
                                                                                AND PLA_activite=1
                                                                )
                                          )
    GROUP BY JOU_nom, JOU_id, P1.PLA_heure_seance, P1.PLA_semaine, P2.PLA_semaine
    ORDER BY JOU_id, P1.PLA_heure_seance;

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 73
    Points
    73
    Par défaut re
    ce serait plus facile pour nous si tu nous fais un schema de ta base avec ses constraintes

  3. #3
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Oki oki ...

    alors déjà, la requete que j'utilise actuellement et qui marche (sauf cas précis) c'est celle là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT JOU_nom, PLA_heure_seance, min(PLA_semaine) AS debut, max(PLA_semaine) AS fin
    FROM PLANNING, ACTIVITES, JOURS
    WHERE PLA_activite=ACT_id And ACT_nom="Gymnastique d'entretien" And PLA_saison=Forms!MenuPrincipal!cmb_saison.value And PLA_jour_seance=JOU_id
    GROUP BY JOU_id, JOU_nom, PLA_heure_seance
    ORDER BY JOU_id, PLA_heure_seance;
    Qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    JOU_nom	PLA_heure_seance	debut	fin
    Lundi	16:00	1	32
    Lundi	18:00	1	32
    Mardi	16:00	1	32
    Mardi	18:00	1	32
    Mercredi	16:00	1	32
    Mercredi	18:00	1	32
    Jeudi	16:00	1	32
    Jeudi	18:00	1	32
    Vendredi	16:00	1	32
    Vendredi	18:00	1	32
    Samedi	16:00	1	32
    Samedi	18:00	1	32
    Dimanche	16:00	1	32
    Dimanche	18:00	1	32
    Mais elle deviens fausse dès que le planning est à cheval sur 2 ans ... (donc semaine fin < semaine debut)

    Je vais poster le schéma ... wait

  4. #4
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Relations :



    Table PARTICIPER





    Table PLANNING




  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 73
    Points
    73
    Par défaut
    Et en fait je dois afficher :
    Code:

    JOUR | HEURE | DEBUT | FIN
    Lundi | 15h00 | 24 | 3
    ton probleme s'agit d'unité de mesure du temps ,
    donc toi tu voudrais afficher la semaine 3 de la nouvelle saison , au lieu de rester dans l'ancienne saison un peu comme lorsque k'on prend une date 25 mai et on ajoute 10 jours , on affiche pas 35 mai , mais le 4 juin!

    je crois que tu dois faire une fonction qui gere ça avec PL/SQL

  6. #6
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    étant donné que je n'ai pas le choix et que je suis sous Access, je suis dans la m**** alors ?

    Il n'y a aucun moyen avec Access ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 73
    Points
    73
    Par défaut
    je ne connais pas du tout Access mais il doit y'avoir une solution c'est même certain

  8. #8
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Laissez tomber, je revoi mon analyse, car j'ai des temps de réponses trop longs dès que je fait des requetes avec des calculs, donc plutot que de tout calculer quand c'est calculable, je vais stocker ...

    Désolé Merise

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 888
    Points : 53 121
    Points
    53 121
    Billets dans le blog
    6
    Par défaut
    Le seule solution viable est d'ajouter à votre base de données un modèle de calendrier comme indiqué dans l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/gestiontemps/

    Cela dit Access n'est absolument pas taillé pour de tels traitements et utilisations. Pourquoi ne pas utiliser MS SQL Server dans sa version "gratuite" qui est MSDE ?
    Ce sera mille fois plus rapide et performant.

    A +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Boucle FOR dans une requete Mysql
    Par skins dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/11/2011, 19h04
  2. Boucle For dans une requete SQL
    Par laurent0 dans le forum Général Python
    Réponses: 2
    Dernier message: 10/08/2011, 17h41
  3. [MySQL] Boucle for dans une requete avec jointure
    Par runcafre91 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/02/2010, 15h12
  4. Héritage boucle infinie dans une dll
    Par MABB dans le forum C++
    Réponses: 11
    Dernier message: 11/06/2009, 21h29
  5. Réponses: 29
    Dernier message: 17/06/2006, 13h04

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