J'ai ce problème, je pense que vous pouvez m'aider.
PS Je ne sais pas comment appeler cela, donc si quelqu'un trouve un titre plus approprié, veuillez le modifier.
Contexte
- Je fais cette application pour rechercher des lignes de transport en commun.
- Les lignes de bus sont à 3 chiffres et sont uniques et ne changeront jamais.
- Il faut pouvoir rechercher des lignes de l'arrêt A à l'arrêt B.
- L'interface utilisateur réussit déjà à suggérer à l'utilisateur de n'utiliser que des noms d'arrêt valides.
- La condition est de pouvoir afficher si un itinéraire a une ligne directe, et sinon, afficher une combinaison de 2 lignes et même de 3 lignes.
Exemple:
Je dois aller du point A au point D. Le programme devrait montrer:
- S'il y a une ligne directe AD.
- Si ce n'est pas le cas, affichez d'autres combinaisons de 2 lignes, telles que AC, CD.
- S'il n'y a pas de combos 2 lignes, recherchez les combos 3 lignes: AB, BC, CD.
Bien sûr, l'application doit afficher les numéros de ligne de bus, ainsi que le moment de changer de bus.
Ce que j'ai:
Ma base de données est structurée comme suit (simplifiée, la base de données réelle comprend les lieux et les heures et ainsi de suite):
+-----------+
| bus_stops |
+----+------+
| id | name |
+----+------+
+-------------------------------+
| lines_stops_relationship |
+-------------+---------+-------+
| bus_line | stop_id | order |
+-------------+---------+-------+
Où lines_stops_relationship
décrivez une relation plusieurs-à-plusieurs entre les lignes de bus et les arrêts.
Ordre, signifie l'ordre dans lequel les arrêts apparaissent sur une seule ligne. Pas toutes les lignes vont et viennent, et l'ordre a un sens (le point A avec l'ordre 2 vient après le point B avec l'ordre 1).
Le problème
- Nous découvrons si une ligne peut traverser l'itinéraire assez facilement. Recherchez simplement une seule ligne qui passe par les deux points dans le bon ordre.
- Comment puis-je trouver s'il y a un combo 2/3 lignes? Je pensais à rechercher une ligne qui correspond à l'arrêt source, et une pour l'arrêt de destination, et voir si je peux obtenir un arrêt commun entre eux, où l'utilisateur peut changer de bus. Comment puis-je me souvenir de cet arrêt?
- Le combo de 3 lignes est encore plus délicat, je trouve une ligne pour la source et une ligne pour la destination, et puis quoi? Recherchez une ligne qui a 2 arrêts, je suppose, mais encore une fois, comment puis-je me souvenir des arrêts?
tl; dr
Comment puis-je me souvenir des résultats d'une requête pour pouvoir les réutiliser? J'espère y parvenir en une seule requête (pour chacun, une requête pour les itinéraires à 1 ligne, une requête pour 2 et une requête pour les combos à 3 lignes).
Remarque: cela ne me dérange pas si quelqu'un suggère une approche complètement différente de la mienne, je suis ouvert à toutes les solutions.
Accordera toute assistance avec un cookie et un vote positif. Merci d'avance!