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 :

Query execution was interrupted


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut Query execution was interrupted
    Bonjour, je fais une recherche pour mon site internet pour filtrer mes produits.
    Ma requête ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Gamme gd, AssociationGamme a, machine m LEFT JOIN marque ma ON m.marqueMachine=ma.idMarque, gerer g,ProduitFiltre p where g.idproduit=m.codeMachine and g.idSousFam='118' and ma.idMarque='45' And (p.idFiltre='2' and substr(p.Valeur,1,2)>=10 AND substr(p.Valeur,1,2)<=19) or (p.idFiltre='3' and p.Valeur<15)
    Mais le résultat est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query execution was interrupted
    Pourtant mes tables ne sont pas très lourdes...
    Comment faire?
    Merci de votre aide

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Il semble manquer un certain nombre de condition de jointure dans votre requête.
    Vous semblez faire de multiple produit cartésien, ce qui pourrait expliquer votre problème.

    Pourquoi mixer les jointures dans le WHERE et les jointures normalisées (votre jointure externe) ?

    Je pense qu'en écrivant toutes vos jointures sous la forme ... JOIN ... ON ... vous verriez immédiatement vos erreurs.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Effectivement...
    1) Les jointures s'écrivent depuis plus de 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    2) Inutile d'entourer les valeurs numériques avec des apostrophes !

    3) Un code indenté et aéré est plus agréable à lire et à débugguer.

    4) Il vaut mieux éviter la guerre des étoiles !

    Voici votre requête remise en forme :
    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
    select les_colonnes_necessaires_et_pas_etoile
    from Gamme gd
    JOIN AssociationGamme a ON -- manque condition de jointure !
    JOIN machine m ON -- manque condition de jointure ! 
    JOIN gerer g ON g.idproduit = m.codeMachine
    LEFT JOIN marque ma ON m.marqueMachine = ma.idMarque
    JOIN ProduitFiltre p ON -- manque condition de jointure ! 
    where  g.idSousFam = 118 
    	and ma.idMarque = 45 
    	And 
    	(
    		p.idFiltre = 2 
    		and substr(p.Valeur,1,2) >= 10 
    		AND substr(p.Valeur,1,2) <= 19
    	) 
    	or 
    	(
    		p.idFiltre = 3 
    		and p.Valeur < 15
    	)
    Vous remarquerez immédiatement qu'il manque des conditions de jointure.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    OK alors j'ai refait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select * from GammeDestructeur gd, 
    AssociationGamme a, 
    machine m LEFT JOIN marque ma ON m.marqueMachine=ma.idMarque, 
    gerer g,
    ProduitFiltre p 
    where 
    gd.idGamme=a.idGamme
    AND a.CodeMachine=m.codeMachine 
    AND m.codeMachine=g.idproduit
    And m.codeMachine=p.codeMachine
    and g.idSousFam='118' 
    and ma.idMarque='45' 
    And (p.idFiltre='2' and substr(p.Valeur,1,2)>=10 
    AND substr(p.Valeur,1,2)<=19) or (p.idFiltre='3' and p.Valeur<15)
    J'ai fait sans les jointures, car je ne sais pas trop comment ça fonctionne lorsqu'il y a plusieurs jointures pour une même table....
    Merci de ton aide.

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Il suffit de faire comme j'ai fait pour réécrire ta requête :

    À la place des virgules entre les tables dans la partie FROM, tu passes à la ligne et tu met un JOIN. Et derrière l'alias de la table, tu mets un ON.
    Ensuite, les conditions de jointure qui sont dans le WHERE, tu les déplaces au bon endroit derrière les ON.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    oups je m'excuse CinePhil je n'avais pas vu votre réponse...
    Merci beaucoup de votre aide

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    J'avais mis résolu mais en fait non....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select * from 
    Gamme gd JOIN AssociationGamme a ON gd.idGamme=a.idGamme 
    JOIN machine m ON a.CodeMachine=m.codeMachine 
    JOIN gerer g ON m.codeMachine =g.idproduit 
    LEFT JOIN marque ma ON m.marqueMachine = ma.idMarque 
    JOIN ProduitFiltre p ON m.codeMachine=p.codeMachine 
    where 
    g.idSousFam='118' 
    And (p.idFiltre='2' and substr(p.Valeur,1,2)>=10 AND substr(p.Valeur,1,2)<=19) 
    or (p.idFiltre='14' and p.Valeur='1') 
    and m.occassion='0' group by gd.idGamme order by prixMachine
    Si je ne mets que 1 filtre, il m’affiche les bons produits, mais si je mets 2 filtres, il prend soit l'un ou soit l'autre, mais pas les deux conditions. J'ai donc remplacé le "or" par un "and", mais ça ne fonctionne pas non plus...
    Merci de votre aide

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/08/2013, 18h41
  2. Query execution was interrupted
    Par Fanel dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/01/2013, 12h07
  3. [MySQL] Erreur : Query was empty(execution plusieurs requetes)
    Par fred619 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/05/2011, 00h06
  4. Série de query réalisés sans interruption ?
    Par Sergejack dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 27/08/2009, 11h03
  5. Réponses: 8
    Dernier message: 19/07/2004, 14h34

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