Le problème que j'ai est d'aller chercher des données dans les tables suivantes où une route de bus contient 1 changement ou plus. Je suis encore relativement nouveau à SQL.MySQL - Obtenir des informations à partir de la base de données des itinéraires de bus
J'ai une base de données contenant 2 tables (bus_route et bus_stop). bus_route contient les colonnes suivantes:
itinéraire - le numéro du bus
run - la direction de l'autobus (1 ou 2)
séquence - la position de la butée le long de l'itinéraire
stop_code - code unique pour cet arrêt
stop_name
longitude
latitude
bus_stop contient les colonnes suivantes:
stop_code
stop_name
latitude
longitude
stop_area - 3 à 8 bus par zone d'arrêt
pour chaque bus il y a entre 20 et 70 lignes de bus_route en fonction du nombre d'arrêts et une ligne par butée dans arrêt de bus.
Je l'ai écrit SQL pour chercher les lignes où nous avons une route directe entre 2 emplacements:
SELECT distinct route
from bus_route
where
SQRT(POW((69.1 * (latitude - {startLocationLatitude})) , 2) +
POW((53 * (longitude - {startLocationLongitude})), 2)) < 0.3
and route in (SELECT distinct route
from bus_route
where
SQRT(POW((69.1 * (latitude - {endLocationLatitude})) , 2) +
POW((53 * (longitude - {endLocationLongitude})), 2)) < 0.3)
Il fonctionne bien en retour les lignes où le la bus_stop est à 0,3 miles de l'emplacement de début/fin.
J'ai également écrit le ci-dessous SQL pour trouver des itinéraires avec 1 changement où le 2ème bus part de la même arrêt que l'endroit où vous partiez le 1er bus:
select t1.route, t1.run, t1.sequence, t1.stop_code, t2.route, t2.run, t2.sequence
from bus_route t1
inner join bus_route t2 on (t2.stop_code=t1.stop_code)
where t1.route in (SELECT distinct route
from bus_route
where
SQRT(POW((69.1 * (latitude - {startLocationLatitude})) , 2) +
POW((53 * (longitude - {startLocationLongitude})), 2)) < 0.3)
and t2.route in (SELECT distinct route
from bus_route
where
SQRT(POW((69.1 * (latitude - {endLocationLatitude})) , 2) +
POW((53 * (longitude - {endLocationLongitude})), 2)) < 0.3))
Les deux déclarations fonctionnent bien mais je ne parviens pas à incorporer stop_area dans l'instruction pour trouver des routes avec 1 changement où le 2ème bus part d'un autre stop dans la même zone stop_.
Tout conseil sur les requêtes ci-dessus ou comment utiliser stop_area serait grandement apprécié.
Je dois aussi mentionner que ce qui suit est pas le mien (je l'ai trouvé en ligne):
SQRT(POW((69.1 * (latitude - {endLocationLatitude})) , 2) +
POW((53 * (longitude - {endLocationLongitude})), 2)) < 0.3))
Merci beaucoup. Cela a bien fonctionné. En guise d'extension, y a-t-il un problème à faire ce qui suit: –
de bus_route t1 #inner rejoindre bus_stop s2 sur la sous-chaîne (s2.stop_area, 0, 3) = sous-chaîne (s1.stop_area, 0, 3) jointure interne bus_stop s2 sur s2.stop_area = s1.stop_area jointure interne bus_route t2 sur t2.stop_code = s2.stop_code –
@Ed Knight: Eh bien, avec sous-chaîne la position du premier caractère est un. Donc vous cherchez probablement 'substring (s2.stop_area, 1,3)'. Sinon, ça a l'air bien. – Andomar