Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum 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 24/09/2011, 17h33   #1
Membre habitué
 
Inscription : décembre 2007
Messages : 392
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 392
Points : 118
Points : 118
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 :
$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
voyageurdumonde est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 17h49   #2
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
J'ai essayé un truc du genre :

Code :
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
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 18h09   #3
Membre habitué
 
Inscription : décembre 2007
Messages : 392
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 392
Points : 118
Points : 118
Salut heretik25,

Avec HAVING j'obtiens le message d'erreur suivant:
Citation:
ERREUR MYSQL num�ro: 1370
Type de cette erreur: execute command denied to user
'xxxxx@'localhost' for routine 'xxxxx.get_distance'
voyageurdumonde est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 18h13   #4
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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 ?
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 18h16   #5
Membre habitué
 
Inscription : décembre 2007
Messages : 392
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 392
Points : 118
Points : 118
Je l'ai trouve sur ce site

http://capmarketer.com/calcul-de-la-...ps-avec-mysql/
voyageurdumonde est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 18h23   #6
Membre habitué
 
Inscription : décembre 2007
Messages : 392
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 392
Points : 118
Points : 118
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?
voyageurdumonde est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 18h48   #7
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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

heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 19h13   #8
Membre habitué
 
Inscription : décembre 2007
Messages : 392
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 392
Points : 118
Points : 118
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
voyageurdumonde est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 19h17   #9
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 12h18   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 028
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 : 11 028
Points : 18 321
Points : 18 321
Envoyer un message via MSN à CinePhil
Dans le WHERE et le ORDER BY, essaie de réutiliser la fonction complète. Et évite la guerre des étoiles !
Code :
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 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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 00h53   #11
Membre habitué
 
Inscription : décembre 2007
Messages : 392
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 392
Points : 118
Points : 118
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 :
$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 :
$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?
voyageurdumonde est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 08h53   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 028
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 : 11 028
Points : 18 321
Points : 18 321
Envoyer un message via MSN à CinePhil
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 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 actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/09/2011, 13h57   #13
Membre habitué
 
Inscription : décembre 2007
Messages : 392
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 392
Points : 118
Points : 118
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
voyageurdumonde 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 17h54.


 
 
 
 
Partenaires

Hébergement Web