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

PHP & Base de données Discussion :

Problème avec une requête SQL


Sujet :

PHP & Base de données

Vue hybride

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Par défaut Problème avec une requête SQL
    Bonjour amis développeurs,

    Voilà je dois mettre en place une géolocalisation et je bloque sur la requête SQL, j'explique ce que j'attends d'elle :

    Je veux rentrer un code postal et en retour elle prend l'ID de la ville en question et qu'elle me donne toutes les villes dans un périmètre de lat-/+rayon défini (0.045 pour le test) et lng-/+rayon défini (0.045 ici aussi pour le test) malheureusement je n'ai rien de concluant... soit ma requête mais trois plombes à afficher quelque chose d'erroné en plus... soit elle ne retourne rien...

    Pourriez-vous m'aider je vous prie ?

    Voici ma requête avec le petit bout de php qui la concerne :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
     
    $SQL = " SELECT C1.lat, C1.lng,
    C1.nom AS nomville, C1.cp,
    C1.ID AS id_commune, C2.ID, C2.cp, C2.lat,
    C2.lng, C2.nom
    FROM commune AS C1
    INNER JOIN commune AS C2 ON C2.ID = C1.ID
    INNER JOIN pharmacie AS p ON p.ID = C1.ID
    INNER JOIN garde AS G ON G.ID_pharm = p.ID
    WHERE C2.ID = $id_commune
    AND C1.lat BETWEEN C2.lat-$rayon AND C2.lat+$rayon
    AND C1.lng BETWEEN C2.lng-$rayon AND C2.lng+$rayon
    AND G.fperiode = $fperiode AND G.dt_garde = $dt_garde
    ";
     
    $rs = mysql_query($SQL) OR die(mysql_error());
    UtilsSosGardes::assertErrorsSQL($SQL);
     
    //Construction de la liste de pharmacies dans la réponse
    if (mysql_num_rows($rs) > 0) { // cas où il y a des pharmacies
    $reponsePharma->pharmacies = array();
    $VIDE = '--';
     
    while ($pharm = mysql_fetch_array($rs))
    {
    $objCommune = new Commune($pharm['id_commune'], $pharm['nomville'], $pharm['cp']);						
    // on tient compte de la configuration d'affichage du secteur pour délivrer ou non les infos
    // en cas d'absence d'info, la valeur sera '--'
    echo $pharm['nomville'];
    if (trim($pharm['txtremp']) != '')
    {
    $objPharm = new Pharmacie(NULL, NULL, NULL, NULL);
    							$objPharm->setTexteRemplacement(trim($pharm['txtremp']));
     
    } else {
    $objPharm = new Pharmacie(
    $secteur['afficher_nom'] ? $pharm['libelle'] : $VIDE, 
    								$secteur['afficher_telephone'] ? $pharm['tel'] : $VIDE, 
    $secteur['afficher_adresse'] ? $pharm['adresse'] : $VIDE, 
    $secteur['afficher_commune'] ? $objCommune : NULL);
    }
    array_push($reponsePharma->pharmacies, $objPharm);
    }
    }

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    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 814
    Billets dans le blog
    14
    Par défaut
    Syntaxiquement, la requête me semble correcte.

    Citation Envoyé par Tyra3l Voir le message
    soit ma requête mais trois plombes à afficher quelque chose
    Pour des problèmes de durée d'exécution, commencer par vérifer que les tables sont bien indexées.
    Ici il faut que soient indexées les colonnes :
    - ID de toutes les tables, mais je suppose que c'est la clé primaire donc ça doit déjà être le cas ;
    - commune.lat et commune.lng ;
    - garde.fperiode et garde.dt_garde.

    d'erroné en plus...
    En analysant la nature de l'erreur, il est peut-être possible d'en découvrir la cause. Mais comme vous ne donnez ni d'exemple de données, ni de résultat attendu ni de résultat obtenu, on ne peut pas vous aider sur ce plan.

    soit elle ne retourne rien...
    Comme il y a des variables dans la requête, commencez par afficher la requête avant son exécution :

    Je ne me prononcerai pas sur la partie PHP ; à voir par plus spécialiste que moi.
    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 !

  3. #3
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Dans la requête:
    C1.ID AS id_commune, C2.ID

    C deux fois la même chose (à cause de la jointure)

    Bon je sais, ça va pas amméliorer (beaucoup) la vitesse, mais bon

    Edit: à traiter le cas des between: le faire plutôt après la requête dans la partie php!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Par défaut
    Citation:
    d'erroné en plus...
    En analysant la nature de l'erreur, il est peut-être possible d'en découvrir la cause. Mais comme vous ne donnez ni d'exemple de données, ni de résultat attendu ni de résultat obtenu, on ne peut pas vous aider sur ce plan.
    Quand je dis erroné je veux dire que en fait elle me renvoie toutes les villes présentes dans la table par test_ville, je vais donc avoir 4000 résultats de test_ville mais toutes avec des informations différentes, en somme je vais par exemple avoir les informations de la ville de Bordeaux mais elle va tout m'afficher en tant que test_ville et pas Bordeaux etc..., gênant...

    En résultat obtenu c'est simple je n'ai rien, un simple "Pas de réponse pour cette requête".Par contre en résultat attendu c'est une liste des pharmacie présentes dans un rayon du code postal entré -/+0.045 en lattitude et longitude...

    Merci encore.

Discussions similaires

  1. Petit problème avec une requête SQL en VB6
    Par muzele dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 15/11/2007, 20h51
  2. Problème avec une requête sql
    Par mika0102 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 10/10/2007, 15h50
  3. [SQL] Problème avec une requête sql
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 11/05/2007, 17h30
  4. [MySQL] Problème avec une requête SQL
    Par chobol dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 11/05/2006, 12h29
  5. [VB]Problème avec une requête SQL
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/03/2006, 17h47

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