Consulta para buscar el mejor transporte -- php campo con mysql campo con database campo con search camp codereview Relacionados El problema

Query for searching for the best transportation


2
vote

problema

Español

Hice un sitio web donde es posible buscar el mejor transporte de un lugar a otro. Por ejemplo, si necesito ir de Berlín a Bremen, el sitio web buscará en su base de datos interna para todos los trenes y autobuses que cubrirán esa distancia.

Para dar los resultados, los sitios web buscan todos los trenes que tienen Berlín o Bremen en sus paradas y también coincidirán con trenes que solo tienen una de las estaciones como la parada.

Por ejemplo, busco Berlín-Bremen, el sitio web también encontrará una solución que incluye un tren que cubre la pista Milán-Dresden y se detiene también en Berlín, después de 20 minutos, un autobús sale de Berlín y va a París, pero se detiene en bremen.

Como puede imaginar que la consulta es bastante complicada y podría tardar mucho tiempo en encontrar los resultados.

Esta es la consulta principal que he hecho:

  SELECT DISTINCT  line.id                             AS line_id, line.type                           AS line_type, TIME_TO_SEC(stop.timeDeparture)     AS time_departure, stop.id_station                     AS departure_id  FROM        `stops`     AS stop INNER JOIN  `days`      AS day      ON ( day.id_line    = stop.id_line ) INNER JOIN  `lines`     AS line     ON ( line.id        = stop.id_line ) INNER JOIN  `stations`  AS station  ON ( station.id     = stop.id_station ) WHERE (     line.status = 1     AND     day.day = ' . $this->day_of_the_week . '     AND     line.type IN (' . $this->type_of_transport . ')     AND     stop.id_station IN (' . $stations_in_departure_location . ')     AND     time_departure > ' . $min_time_plus_walk_time . ' ) OR (     line.status = 1     AND     day.day = ' . $day_of_the_week_tomorrow . '     AND     line.type IN (' . $this->type_of_transport . ')     AND     stop.id_station IN (' . $stations_in_departure_location . ')     AND     time_departure > ' . $night_min_time_plus_walk_time . '     AND     time_departure < ' . $night_max_time . ' )   ORDER BY     stop.timeDeparture,     stop.timeArrival   

Esta es la estructura de la base de datos:

eer diagram

Hice una función de búsqueda recursiva que usa esta misma consulta para encontrar todos los trenes / autobuses que pueda tomar de cualquiera de las ciudades donde se encuentran cualquiera de los trenes / autobuses que se encuentran en la iteración antes de las paradas.

Cada vez que encuentra una combinación de líneas que alcanzan el destino elegido, lo agrega a una matriz que se ordenará y se filtrará según las preferencias de los usuarios.

Tuve que limitar el recuento de iteración a 2, de lo contrario, se vuelve demasiado lento.

¿Puede sugerir mejores prácticas, una mejor solución o una manera de mejorarlo?

Original en ingles

I made a website where is possible to search for the best transportation from a place to another. For instance, if I need to go from Berlin to Bremen, the website will search in its internal database for all the trains and buses that will cover that distance.

To give the results, the websites look for all the trains which have Berlin or Bremen in their stops and will also match trains which have only one of the stations as stop.

For example, I look for Berlin-Bremen, the website will also find a solution which includes a train that cover the track Milan-Dresden and stops also in Berlin, after 20 minutes a bus leave from Berlin and goes to Paris but stops in Bremen.

As you can imagine the query is quite complicated and it might take a lot of time to find the results.

This is the main query I've done:

SELECT DISTINCT  line.id                             AS line_id, line.type                           AS line_type, TIME_TO_SEC(stop.timeDeparture)     AS time_departure, stop.id_station                     AS departure_id  FROM        `stops`     AS stop INNER JOIN  `days`      AS day      ON ( day.id_line    = stop.id_line ) INNER JOIN  `lines`     AS line     ON ( line.id        = stop.id_line ) INNER JOIN  `stations`  AS station  ON ( station.id     = stop.id_station ) WHERE (     line.status = 1     AND     day.day = ' . $this->day_of_the_week . '     AND     line.type IN (' . $this->type_of_transport . ')     AND     stop.id_station IN (' . $stations_in_departure_location . ')     AND     time_departure > ' . $min_time_plus_walk_time . ' ) OR (     line.status = 1     AND     day.day = ' . $day_of_the_week_tomorrow . '     AND     line.type IN (' . $this->type_of_transport . ')     AND     stop.id_station IN (' . $stations_in_departure_location . ')     AND     time_departure > ' . $night_min_time_plus_walk_time . '     AND     time_departure < ' . $night_max_time . ' )   ORDER BY     stop.timeDeparture,     stop.timeArrival 

This is the database structure:

EER Diagram

I made a recursive search function that uses this same query to find every train/bus that you could take from any of the cities where any of the trains/buses found in the iteration before stops.

Every time it finds a combination of lines that reach the chosen destination, it adds it to an array which will be then sorted and filtered depending on the users preferences.

I had to limit the iteration count to 2, otherwise it gets too slow.

Can you please suggest best practices, a better solution or a way to improve it?

           
   
   

Lista de respuestas


Relacionados problema

1  Buscando y reemplazando el texto  ( Searching and replacing text ) 
Modificador de listas de reproducción simple Este programa es un programa de búsqueda y reemplazo para archivos basados ​​en texto. El objetivo principal ...

4  HackerRank Grid Search Challenge  ( Hackerrank grid search challenge ) 
He escrito una respuesta para la búsqueda de la cuadrícula desafío en Hackerrank . Por favor, hágamelo saber de cualquier mejora que se pueda hacer en mi im...

2  Pequeño marco de búsqueda de ruta genérica en Java  ( Small generic path search framework in java ) 
Tengo esta pequeña biblioteca de búsqueda de ruta genérica. No es perfecto en absoluto, así que necesito algunos comentarios para tener la oportunidad de mejo...

5  Búsqueda binaria eficiente  ( Efficient binary search ) 
Mi implementación: 157 Implementación normal: 158 La diferencia de ser mi implementación hace una conjetura en el índice del valor en función de l...

4  Búsqueda a través de una lista de contactos para los criterios dados  ( Searching through a contact list for given criteria ) 
He estado mirando a este código por un tiempo ahora y estoy pensando que hay una manera de optimizarlo (a saber, el if - 9988777665544337 Declaración con ...

3  Encuentra una cadena en una matriz  ( Find a string in an array ) 
Este programa se utiliza para obtener nombres y números de N Person, imprima los números de una persona. Por favor, ayúdame a mejorar este código. Pregunta ...

3  Nede.js JSON Búsqueda y actualización  ( Node js json searching updating ) 
Estoy trabajando en un controlador de encendido / apagado basado en la web para múltiples interruptores. Estoy buscando una buena manera de administrar el est...

14  ¿Encontrar la subtupla en una colección más grande?  ( Finding subtuple in larger collection ) 
Tengo una matriz plana de & lt; 1000 artículos y necesito encontrar los índices de una tupla / matriz más pequeña dentro de la matriz. La tupla para encontrar...

3  Búsqueda a través de archivos .xml para texto que existe en cualquier lugar del archivo  ( Search through xml files for text that exists anywhere in the file ) 
Tengo alrededor de 1000 archivos .xml en diferentes directorios bajo una carpeta raíz. Mi directorio raíz contiene la estructura de abajo: RootDir1720a...

31  Un algoritmo de búsqueda  ( A search algorithm ) 
NodeData8 almacena toda la información del nodo que necesita el AStar algoritmo. Esta información incluye el valor de _cache0 , _cache1 y 998877665...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos