Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/03/2011, 18h43   #1
Membre du Club
 
Homme Nicolas Chaussé
Étudiant Réseaux et Télécoms
Inscription : octobre 2009
Messages : 103
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Chaussé
Âge : 20
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant Réseaux et Télécoms
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2009
Messages : 103
Points : 56
Points : 56
Par défaut Problème requête SQL

Bonsoir à tous,

Après des heures de recherche, je viens de trouver la source de mon problème... une requête SQL.

Que je vous explique l'histoire, j'ai une base de donnée qui se nomme Essai5 où la requête SQL fonctionne(elle renvoit aucun résultat mais celà est normale) cependant cette base était un peu vide, elle était utiliser pour faire des tests. Mon collègue a donc créé une nouvelle base avec la base remplie cette fois-ci, elle se nomme Essai2. Cependant, lorsque je lance la requête ci-dessous dans cette base de donnée alors mon phpmyadmin plante et je suis obliger de relancer le daemon de phpmyadmin.

Voici la requete:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT p.horairesPasser,l.numLignes, p.idBus 
FROM Passer AS p 
INNER JOIN Arrets AS a ON a.idArrets = p.idArrets 
INNER JOIN Bus AS b ON b.idBus = p.idBus 
  INNER JOIN Lignes AS l ON l.idLignes = b.idLignes 
WHERE l.nomLignes = "Dompierre -> Aubigny" 
  AND a.nomArrets = "Dompierre" 
  AND p.idBus IN (
    SELECT idBus 
    FROM Passer AS p 
    INNER JOIN Arrets AS a ON a.idArrets = p.idArrets 
    WHERE p.idbus IN 
      ( 
    SELECT idBus 
    FROM Passer AS p 
    INNER JOIN Arrets AS a ON a.idArrets = p.idArrets 
    WHERE a.nomArrets ="Dompierre"
      ) 
      AND a.nomArrets =  "Aubigny"
) 
ORDER BY p.horairesPasser 
LIMIT 1
J'ai vérifié par mes soins si les deux base de données possédaient la même structure, et je n"ai vu aucune différence... J'ai d'ailleurs essayé deux pc différents et toujours le même problème.

Je vais vous mettre les deux bases en pièce-jointe.

POur la deuxième base, elle est ici: http://projets.developpez.com/projects/simplybus/files

Trop importante pour la mettre en pièce-jointe.

Merci de m'aider car c'est très urgent.

Cordialement
Fichiers attachés
Type de fichier : sql Essai5.sql (5,8 Ko, 0 affichages)
TWEESTY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 23h28   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
J'ai du mal à comprendre le sens de ta requête.
Tu veux les horaires de bus de l'arrêt Dompierre pour les bus qui passent aussi à Aubigny ?
Comme c'est la ligne Dompierre => Aubigny, ils y passent tous non ?

Ou alors explique le besoin.

Ta requête rame probablement à cause des sous-requêtes. Elles doivent pouvoir être remplacées par des jointures, pour autant qu'elles soient nécessaires.

Et bien sûr tes tables sont correctement indexées ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/03/2011, 23h34   #3
Membre du Club
 
Homme Nicolas Chaussé
Étudiant Réseaux et Télécoms
Inscription : octobre 2009
Messages : 103
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Chaussé
Âge : 20
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant Réseaux et Télécoms
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2009
Messages : 103
Points : 56
Points : 56
Bonsoir,

Oui, c'est tout à fait çà! En effet, des fois les bus ne passent pas par tous les arrêts en fonction des horaires

Je pensais aussi à une faute de mon collègue en recopiant la base, mais j'ai bien tout regardé et je vois aucune différence par rapport à la première base au niveau structurel.

Cependant, je pense que ca vient bien de là le soucis car outrement une requête fonctionnant sur une base doit fonctionner sur une autre base identique.

Cordialement
TWEESTY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 22h39   #4
Membre du Club
 
Homme Nicolas Chaussé
Étudiant Réseaux et Télécoms
Inscription : octobre 2009
Messages : 103
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Chaussé
Âge : 20
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant Réseaux et Télécoms
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2009
Messages : 103
Points : 56
Points : 56
Bonsoir,

J'ai essayé de séparer ma requête :=)

J'ai tenté cette première partie:

Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT idBus 
    FROM Passer AS p 
    INNER JOIN Arrets AS a ON a.idArrets = p.idArrets 
    WHERE p.idbus IN 
      ( 
    SELECT idBus 
    FROM Passer AS p 
    INNER JOIN Arrets AS a ON a.idArrets = p.idArrets 
    WHERE a.nomArrets ="Dompierre"
      ) 
      AND a.nomArrets =  "Aubigny"
Et j'obtiens: 5,90, et je ne sais plus quoi

Après je remplace donc ma première requête par:

Code :
1
2
3
4
5
6
7
8
9
10
SELECT p.horairesPasser,l.numLignes, p.idBus 
FROM Passer AS p 
INNER JOIN Arrets AS a ON a.idArrets = p.idArrets 
INNER JOIN Bus AS b ON b.idBus = p.idBus 
  INNER JOIN Lignes AS l ON l.idLignes = b.idLignes 
WHERE l.nomLignes = "Dompierre -> Aubigny" 
  AND a.nomArrets = "Dompierre" 
  AND p.idBus=5
ORDER BY p.horairesPasser 
LIMIT 1
Et là, ca marche
De quel paramètre aurais-je pu oublier dans ma BDD pour que je ne puisse pas faire la première requête directement?

Comment puis-je faire pour qu'il n'y ait plus cette requête imbriquée?

Cordialement
TWEESTY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 09h02   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
On peut avoir la structure des tables ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 18h45   #6
Membre du Club
 
Homme Nicolas Chaussé
Étudiant Réseaux et Télécoms
Inscription : octobre 2009
Messages : 103
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Chaussé
Âge : 20
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant Réseaux et Télécoms
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2009
Messages : 103
Points : 56
Points : 56
Bonsoir,

Cinephil, vous venez de me faire un tilt

Mon collègue avait oublier de mettre les clés étrangères

Merci beaucoup.

Cordialement
TWEESTY est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h21.


 
 
 
 
Partenaires

Hébergement Web