Eu tenho esse problema, acho que você pode me ajudar.
PS Não sei bem como chamar isso, portanto, se alguém encontrar um título mais apropriado, edite-o.
fundo
- Estou fazendo este aplicativo para pesquisar linhas de transporte público.
- As linhas de ônibus são um número de 3 dígitos e são únicas e nunca serão alteradas.
- O requisito é poder procurar linhas da parada A à parada B.
- A interface do usuário já conseguiu sugerir ao usuário que use apenas nomes de parada válidos.
- O requisito é poder exibir se uma rota possui uma linha direta e, se não, exibir uma combinação de 2 e até 3 linhas.
Exemplo:
Preciso ir do ponto A ao ponto D. O programa deve mostrar:
- Se houver uma linha direta AD.
- Caso contrário, exiba alternativos combos de 2 linhas, como AC, CD.
- Se não houver combos de duas linhas, procure combos de três linhas: AB, BC, CD.
Obviamente, o aplicativo deve exibir os números das linhas de ônibus, bem como quando trocar de ônibus.
O que eu tenho:
Meu banco de dados está estruturado da seguinte forma (simplificado, o banco de dados real inclui locais e horários e outros enfeites):
+-----------+
| bus_stops |
+----+------+
| id | name |
+----+------+
+-------------------------------+
| lines_stops_relationship |
+-------------+---------+-------+
| bus_line | stop_id | order |
+-------------+---------+-------+
Onde lines_stops_relationship
descrever uma relação de muitos para muitos entre as linhas de ônibus e as paradas.
Ordem, significa a ordem na qual as paradas aparecem em uma única linha. Nem todas as linhas se alternam e a ordem tem significado (o ponto A da ordem 2 vem depois do ponto B da ordem 1).
O problema
- Descobrimos se uma linha pode atravessar a rota com bastante facilidade. Basta procurar por uma única linha que passe pelos dois pontos na ordem correta.
- Como posso descobrir se existe uma combinação de 2/3 de linha? Eu estava pensando em procurar uma linha que corresponda à parada de origem e uma para a parada de destino, e ver se consigo uma parada comum entre elas, onde o usuário possa trocar de ônibus. Como me lembro dessa parada?
- A combinação de 3 linhas é ainda mais complicada, acho uma linha para a fonte e outra para o destino, e depois? Procure uma linha com 2 paradas, eu acho, mas novamente, como me lembro das paradas?
tl; dr
Como me lembro dos resultados de uma consulta para poder usá-lo novamente? Espero conseguir isso em uma única consulta (para cada uma, uma consulta para rotas de 1 linha, uma consulta para 2 e uma consulta para combos de 3 linhas).
Nota: Não me importo se alguém sugerir uma abordagem completamente diferente da minha, estou aberto a qualquer solução.
Premiará qualquer assistência com um cookie e um voto positivo. Desde já, obrigado!