Je développe une application dans Android pour montrer les itinéraires de bus de ma ville natale, j'ai des problèmes avec une requête, j'ai deux tables dans mon application comme indiqué ci-dessous:
tableau INFORMATION
ID | NAME | DIRECTION
--------------------------
1 | BUS 1 | departure
2 | BUS 1 | return
3 | BUS 2 | departure
4 | BUS 2 | return
5 | BUS 3 | departure
6 | BUS 3 | return
table COORDONNEES
ID | INFORMATION_ID | LAT | LON |
-------------------------------------------------
1 | 1 | 19.171184 | -96.174029 |
2 | 1 | 19.171021 | -96.173991 |
3 | 1 | 19.171002 | -96.173979 |
5 | 2 | 19.193244 | -96.138732 |
6 | 2 | 19.193368 | -96.138957 |
7 | 2 | 19.193332 | -96.138741 |
J'essaie de montrer les lignes de bus à proximité dans un rayon de 500 m et je suis en mesure de le faire avec cette requête.
SELECT DISTINCT NAME,
((example.lat - COORDINATES.LAT) * (example.lat - COORDINATES.LAT) + (example.lon - COORDINATES.LON) * (example.lon - COORDINATES.LON)) AS DISTANCE
FROM COORDINATES
INNER JOIN INFORMATION
ON COORDINATES.INFORMATION_ID=INFORMATION.ID
WHERE DISTANCE < 0.000023544 //supposedly 500 m, im not sure
ORDER BY DISTANCE
Mais le problème est que j’ai répété des valeurs dansle champ NOM parce que j'ai plusieurs points de latlon dans les itinéraires de bus qui se trouvent dans la plage, Je dois juste retourner la distance minimale avec le nom correspondant comme ceci:
ID | NAME | DISTANCE
---------------------
1 | BUS 1 | 1.349834...
3 | BUS 2 | 1.367033...
Je vais ajouter toutes les instructions pour résoudre ce problème, merci.
Réponses:
0 pour la réponse № 1Voir si cela aide à obtenir la distance la plus courte.
SELECT NAME, MIN(DISTANCE) FROM
(
SELECT NAME,
((19.171150 - COORDINATES.LAT) * (19.171184 - COORDINATES.LAT) +
(-96.173990 - COORDINATES.LON) * (-96.173990 - COORDINATES.LON)) AS DISTANCE
FROM COORDINATES
INNER JOIN INFORMATION
ON COORDINATES.INFORMATION_ID=INFORMATION.ID
WHERE DISTANCE < 0.000023544
)
GROUP BY NAME
http://sqlfiddle.com/#!7/2e1ea/4