Tengo este problema, creo que me puede ayudar.
PD No estoy seguro de cómo llamar a esto, así que si alguien encuentra un título más apropiado, edítelo.
Antecedentes
- Estoy haciendo esta aplicación para buscar líneas de tránsito de autobuses.
- Las líneas de autobús son un número de 3 dígitos, es único y nunca cambiará.
- El requisito es poder buscar líneas desde la parada A hasta la parada B.
- La interfaz de usuario ya tiene éxito al indicar al usuario que solo use nombres de parada válidos.
- El requisito es poder mostrar si una ruta tiene una línea directa, y si no, mostrar una combinación de 2 líneas e incluso 3 líneas.
Ejemplo:
Necesito ir del punto A al punto D. El programa debería mostrar:
- Si hay una línea directa AD.
- Si no, muestre combos alternativos de 2 líneas, como AC, CD.
- Si no hay combos de 2 líneas, busque combos de 3 líneas: AB, BC, CD.
Por supuesto, la aplicación debe mostrar los números de línea de los autobuses, así como cuándo cambiar de autobús.
Lo que tengo:
Mi base de datos está estructurada de la siguiente manera (la base de datos simplificada y real incluye ubicaciones, horarios y demás):
+-----------+
| bus_stops |
+----+------+
| id | name |
+----+------+
+-------------------------------+
| lines_stops_relationship |
+-------------+---------+-------+
| bus_line | stop_id | order |
+-------------+---------+-------+
Donde se lines_stops_relationship
describe una relación de muchos a muchos entre las líneas de autobús y las paradas.
Orden, significa el orden en que aparecen las paradas en una sola línea. No todas las líneas van y vienen, y el orden tiene significado (el punto A con el orden 2 viene después del punto B con el orden 1).
El problema
- Averiguamos si una línea puede pasar por la ruta con bastante facilidad. Simplemente busque una sola línea que pase por ambos puntos en el orden correcto.
- ¿Cómo puedo encontrar si hay un combo de 2/3 líneas? Estaba pensando en buscar una línea que coincida con la parada de origen, y una para la parada de destino, y ver si puedo obtener una parada común entre ellos, donde el usuario puede cambiar de autobús. ¿Cómo recuerdo esa parada?
- El combo de 3 líneas es aún más complicado, encuentro una línea para la fuente y una línea para el destino, ¿y luego qué? Busque una línea que tenga 2 paradas, supongo, pero de nuevo, ¿cómo recuerdo las paradas?
tl; dr
¿Cómo recuerdo los resultados de una consulta para poder usarla nuevamente? Espero lograr esto en una sola consulta (para cada una, una consulta para rutas de 1 línea, una consulta para 2 y una consulta para combos de 3 líneas).
Nota: No me importa si alguien sugiere un enfoque completamente diferente al que tengo, estoy abierto a cualquier solución.
Otorgará cualquier ayuda con una cookie y un voto a favor. ¡Gracias por adelantado!