I have this problem I think you may help me with.
P.S. I'm not sure how to call this, so if anyone finds a more appropriate title, please do edit.
- I'm making this application for searching bus transit lines.
- Bus lines are a 3 digit number, and is unique and will never change.
- The requirement is to be able to search for lines from stop A to stop B.
- The user interface is already successful in hinting the user to only use valid stop names.
- The requirement is to be able to display if a route has a direct line, and if not, display a 2-line and even 3-line combination.
I need to get from point A to point D. The program should show:
- If there's a direct line A-D.
- If not, display alternative, 2 line combos, such as A-C, C-D.
- If there aren't any 2-line combos, search for 3-line combos: A-B, B-C, C-D.
Of course, the app should display bus line numbers, as well as when to switch buses.
What I have:
My database is structured as follows (simplified, actual database includes locations and times and whatnot):
+-----------+ | bus_stops | +----+------+ | id | name | +----+------+ +-------------------------------+ | lines_stops_relationship | +-------------+---------+-------+ | bus_line | stop_id | order | +-------------+---------+-------+
lines_stops_relationship describe a many-to-many relationship between the bus lines and the stops.
Order, signifies the order in which stops appear in a single line. Not all lines go back and forth, and order has meaning (point A with order 2 comes after point B with order 1).
- We find out if a line can pass through the route easily enough. Just search for a single line which passes through both points in the correct order.
- How can I find if there's a 2/3 line combo? I was thinking to search for a line which matches the source stop, and one for the destination stop, and see if I can get a common stop between them, where the user can switch buses. How do I remember that stop?
- 3 line combo is even trickier, I find a line for the source, and a line for the destination, and then what? Search for a line which has 2 stops I guess, but again, How do I remember the stops?
How do I remember results from a query to be able to use it again? I'm hoping to achieve this in a single query (for each, a query for 1-line routes, a query for 2, and a query for 3-line combos).
Note: I don't mind if someone suggests a completely different approach than what I have, I'm open to any solutions.
Will award any assistance with a cookie and an upvote. Thanks in advance!