Between sur un Alias ?

Between sur un Alias ? - SQL/NoSQL - Programmation

Marsh Posté le 06-04-2006 à 18:08:17    

Je me voit encore bloqué avec la mise au point de mon moteur de géolocalisation [:brainbugs]
 
 
Mais là c'est pour une connerie, enfin je crois...je penche sur une erreur d'orthographe mais pas moyen de trouver où [:petrus75]
 
 
J'ai une table match_users dans laquelle est notée les champs "latitude" et "longitude" en radians. Jusque là pas de souci...
 
 
Viens ensuite la requète qui permet en théorie de déterminer un rayon de recherche autour du domicile de la personne :
 

Code :
  1. SELECT id, latitude, LONGITUDE, round(((6366*acos(cos(latitude)*cos(0.759218224617533)*cos(0.113155507353202-LONGITUDE)+sin(latitude)*sin(0.759218224617533)))*1.4),1) AS 'proximite' FROM match_users WHERE 'proximite' BETWEEN '0' AND '200'


 
 
Bien entendu ça me renvoie 0 résultats, ça aurait été trop simple [:aras qui rit]
 
 
Je penchais pour un souci de chiffres entiers (me rapelle plus le terme exact, quand 16000 est plus grand que 130000). Bref j'en arrive à créer cette requète :
 

Code :
  1. SELECT id, latitude, LONGITUDE, round(((6366*acos(cos(latitude)*cos(0.759218224617533)*cos(0.113155507353202-LONGITUDE)+sin(latitude)*sin(0.759218224617533)))*1.4),1) AS 'proximite' FROM match_users WHERE (('proximite' > 0) AND ('proximite' < 200))


 
 
Mais j'ai l'impression que ce qui viens perturber le tout c'est l'alias "proximite". J'ai essayé tout ce que je trouvais sur mon clavier avec des parenthèses partout, des ", des ', des `` mais j'obtiens ou aucun résultat ou bien alors la totalité :/
 
 
Quelqu'un aurait une idée pour me sortir de ce pétrin [:brainbugs] ??


---------------
Michael Schumacher laissera une trace immense dans l'histoire de notre sport. Il en a aussi laissé une belle sur les flancs de ma Williams à Adélaïde, en 1994...
Reply

Marsh Posté le 06-04-2006 à 18:08:17   

Reply

Marsh Posté le 06-04-2006 à 18:24:43    

SELECT id, latitude, LONGITUDE, round(((6366*acos(cos(latitude)*cos(0.759218224617533)*cos(0.113155507353202-LONGITUDE)+sin(latitude)*sin(0.759218224617533)))*1.4),1) AS 'proximite'
FROM match_users
WHERE round(((6366*acos(cos(latitude)*cos(0.759218224617533)*cos(0.113155507353202-LONGITUDE)+sin(latitude)*sin(0.759218224617533)))*1.4),1)  BETWEEN '0' AND '200';
 
:D

Reply

Marsh Posté le 06-04-2006 à 18:31:59    

C'est un HAVING qu'il faut, pas un WHERE  [:zytrafumay]
 
De plus et si ton sgbd le permet, pour la clareté et maintenabilité il vaut mieux faire une fonction stockée.


Message édité par smaragdus le 06-04-2006 à 18:33:48
Reply

Marsh Posté le 06-04-2006 à 18:48:47    


 
 
C'est bourrin, très bourrin même...mais ça fonctionne [:aras qui rit]
 
 
C'est quand qu'on se marie [:brainbugs] ??
 
 
Sinon smaragbus une fonction stockée est impossible : 35000 villes dans la base à multiplier par 35000, ça nous donne un truc du genre "costaud", enfin si j'ai bien compris ce que tu voulais dire par "fonction stockée" [:markdavis]


---------------
Michael Schumacher laissera une trace immense dans l'histoire de notre sport. Il en a aussi laissé une belle sur les flancs de ma Williams à Adélaïde, en 1994...
Reply

Marsh Posté le 06-04-2006 à 22:44:33    

Syl_83 a écrit :


Sinon smaragbus une fonction stockée est impossible : 35000 villes dans la base à multiplier par 35000, ça nous donne un truc du genre "costaud", enfin si j'ai bien compris ce que tu voulais dire par "fonction stockée" [:markdavis]


 
non c'est pas ça. Une fonction stockée, c'est...
 
 
...une fonction stockée dans la db [:catharsis]  
 
et sinon pour ta requete, il faut utilisé un HAVING :

Citation :


SELECT id, latitude, LONGITUDE, round(((6366*acos(cos(latitude)*cos(0.759218224617533)*cos(0.113155507353202-LONGITUDE)+sin(latitude)*sin(0.759218224617533)))*1.4),1) AS proximite FROM match_users HAVING proximite BETWEEN 0 AND 200


 
c'est quand même plus clair  :sarcastic:
 
et avec une fonction stockée :  

Citation :

SELECT id, latitude, LONGITUDE, distance(latitude,LONGITUDE) AS proximite FROM match_users HAVING proximite BETWEEN 0 AND 200


 
ça sert d'ouvrir une doc sql

Message cité 1 fois
Message édité par smaragdus le 06-04-2006 à 23:08:10
Reply

Marsh Posté le 06-04-2006 à 23:31:59    

smaragdus a écrit :

non c'est pas ça. Une fonction stockée, c'est...
 
 
...une fonction stockée dans la db [:catharsis]  
 
ça sert d'ouvrir une doc sql


 
 
Fonction stockée pas possible je crois, je suis en mySQL 4.1 et ce n'est possible qu'a partir de la version 5 si j'ai bien compris :)
 
 
Sinon oui c'est beaucoup plus clair avec un HAVING [:petrus75]
 
 
Je manque un peu de réflexes, j'suis encore un peu "tendre", y'a moins d'un mois je ne savais même pas ce qu'était le SQL et je n'avais absolument aucune notion de programation dans un quelquonque autre langage [:brainbugs]
 
 
Là j'ai eu beau lire la doc je n'ai rien trouvé de concluant :/
 
 
Enfin ça fonctionne, c'est déjà ça [:aras qui rit]


---------------
Michael Schumacher laissera une trace immense dans l'histoire de notre sport. Il en a aussi laissé une belle sur les flancs de ma Williams à Adélaïde, en 1994...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed