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 :

Utilisation de AS dans un SELECT [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Par défaut Utilisation de AS dans un SELECT
    Bonjour,

    Je fais le select suivant pour faisant un order a partir d'une fonction sql dans la BDD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT *, get_distance($lat, $lng, lat, lng) AS proximite FROM menus WHERE proximite < 1000 ORDER BY proximite ASC";
    Mais j'obtiens le message Type de cette erreur: Unknown column 'proximite' in 'where clause'

    Pourtant dans ce cas proximite n'est pas une colonne (AS) mais bien le resultat de la fonction? c'est bien cela?

    Merci de votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    J'ai essayé un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *, count(id) as toto FROM `pts_gpx` HAVING toto > 1000 order by toto asc
    Essaye de regarder du côté du mot clé HAVING

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Par défaut
    Salut heretik25,

    Avec HAVING j'obtiens le message d'erreur suivant:
    ERREUR MYSQL num�ro: 1370
    Type de cette erreur: execute command denied to user
    'xxxxx@'localhost' for routine 'xxxxx.get_distance'

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Apparemment, tu n'as pas les droits d'utiliser la fonction get_distance(). C'est une fonction sql que tu as toi même créée ?

    Qu'est-ce qu'elle doit produire ? Une distance en 3d ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Par défaut
    peut-etre que je l'ai mise a la mauvaise place. lorsque je suis dans PhPMyadmin, je clique sur la table concernee par mon select et j'inscrit la fonction dans le menu SQL. C'est bien comme cela que l'on doit faire?

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Pour créer ta fonction, tu ouvre ton requêteur sql et tu exécutes.

    Moi aussi je calcul la distance en 3d mais j'ai fait ça côté php.

    Si tu désires la fonction n'hésite pas à demander. Cela me permet entre autre de générer un profil d'élévation ou de compter la distance du parcours.

    Ex de profil : http://partir-en-vtt.com/php/gpx/app...r_periples=305

    Statistiques issues des données GPS :

    http://partir-en-vtt.com/php/gpx/ope...stats_periples


  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Par défaut
    J'utilise aussi une fonction PHP pou calculer les distance mais dans mon cas present, je voudrais faire un classement a partir du resultat d'une fonction dans un SELECT et c'est la que ca se complique

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Citation Envoyé par voyageurdumonde Voir le message
    J'utilise aussi une fonction PHP pou calculer les distance mais dans mon cas present, je voudrais faire un classement a partir du resultat d'une fonction dans un SELECT et c'est la que ca se complique
    Rien ne semble t'empêcher de le faire côté php

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    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 815
    Billets dans le blog
    14
    Par défaut
    Dans le WHERE et le ORDER BY, essaie de réutiliser la fonction complète. Et évite la guerre des étoiles !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = "
        SELECT /* les colonnes nécessaires et pas étoile ! */, 
        get_distance($lat, $lng, lat, lng) AS proximite 
        FROM menus 
        WHERE get_distance($lat, $lng, lat, lng) < 1000 
        ORDER BY get_distance($lat, $lng, lat, lng) ASC
    ";
    Avec le code indenté, la requête est plus lisible non ?
    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 !

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Par défaut
    Merci CinePhil mais j'ai un blocage par mon hebergeur pour utiliser les fonctions integrer dans la BDD.

    J'ai fais ceci. le calcul est bon et donne les bon resultat mais le ORDER BY proximite ne fonctionne pas

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = "SELECT lat,lng,type,noms,totale, (3958*3.1415927*sqrt((lat-'.$lat.')*(lat-'.$lat.') + cos(lat/57.29578)*cos('.$lat.'/57.29578)*(lng-'.$lng.')*(lng-'.$lng.'))/180) AS proximite FROM menus WHERE id IN (".$id.") ORDER BY proximite ASC";
    Et voici les resultat du calcul 5288.59726869, 5289.21486205 , 5289.31975715 etc...


    j'ai aussi essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = "SELECT * FROM menus WHERE id IN (".$id.") ORDER BY (3958*3.1415927*sqrt((lat-'.$lat.')*(lat-'.$lat.') + cos(lat/57.29578)*cos('.$lat.'/57.29578)*(lng-'.$lng.')*(lng-'.$lng.'))/180)  ASC";
    Mais pas mieux.
    Une idee?

  12. #12
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    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 815
    Billets dans le blog
    14
    Par défaut
    Tes variables sont des nombres, inutile de les mettre entre apostrophes. Par contre, tu auras peut-être besoin de les transformer en type équivalent au type de la colonne.
    Quels sont les types des colonnes lat et lng ?
    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 !

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Par défaut
    Bonjour CinePhil,

    Les colonnes sont du type decimal(10,6). Par contre j'ai retire les apostrophes comme tu me le disais et maintenant ca fonctionne.

    Merci beaucoup

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

Discussions similaires

  1. Utiliser deux sommes dans un select
    Par Jinkas dans le forum Développement
    Réponses: 7
    Dernier message: 31/07/2013, 12h09
  2. Utilisation de when dans un SELECT
    Par xavier0302 dans le forum Débutez
    Réponses: 2
    Dernier message: 23/05/2013, 17h15
  3. Utilisation des alias dans le SELECT d'une requête
    Par olivier.x dans le forum Développement
    Réponses: 2
    Dernier message: 15/04/2010, 13h07
  4. Utilisation de StoredProcedure dans un select?
    Par BenoitM dans le forum Développement
    Réponses: 2
    Dernier message: 13/09/2009, 12h21
  5. [PL/SQL] utilisation de variables dans un select?
    Par Dr Kraft dans le forum SQL
    Réponses: 8
    Dernier message: 11/10/2006, 10h17

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