Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Consulta un tanto extraña...

Estas en el tema de Consulta un tanto extraña... en el foro de Mysql en Foros del Web. Hola amigos, estoy un poco sorprendido y a la vez fastidiado por no poder llegar a entender cómo hacen en una web para realizar una ...
  #1 (permalink)  
Antiguo 24/06/2014, 10:18
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Consulta un tanto extraña...

Hola amigos, estoy un poco sorprendido y a la vez fastidiado por no poder llegar a entender cómo hacen en una web para realizar una consulta MySQL:

La web en cuestión es AutoScout24, puedes ir poniendo parámetros de búsqueda y te va dando el número de resultados hasta ahí bien, fácil. Pero el último campo es a qué distancia debe buscar a partir de un código postal. No tengo ni la más remota idea de cómo consiguen esto.

Agradecería que me arrojarais un poco de luz sobre este tema ya que estoy totalmente perdido, ni imagino por qué caminos van estas consultas.

Última edición por gnzsoloyo; 24/06/2014 a las 11:24 Razón: No poner Links que se pueden tomar como promo
  #2 (permalink)  
Antiguo 24/06/2014, 11:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta un tanto extraña...

A nivel de base, no es. Probablemente Ajax o PHP. En la base simplemente vas corriendo las consultas que la pagina envía por Ajax.

Si quieres te puedo pasar el post al foro adecuado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/06/2014, 11:50
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Consulta un tanto extraña...

Hola gnzsoloyo, gracias por responder, la verdad es que dudaba que fuera sql pero por algo tenía que empezar, la verdad que con esto estoy muy perdido.

Muévelo donde creas conveniente, y a ver si alguien puede echarme una mano. Ojalá...
  #4 (permalink)  
Antiguo 24/06/2014, 13:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consulta un tanto extraña...

Pues yo tampoco entiendo, de ser problema de código PHP no veo nada, ¿podrías explicar de nuevo tu problema?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 24/06/2014, 13:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta un tanto extraña...

a ver si he entendido:
si lo que quieres es una base de datos que te proporcione la distancia desde un punto como centro con un radio concreto, te toca conseguir una base con las localidades y todos los códigos postales, pero además con su longitud y latitud. Las hay de pago, como esta, que te ofrece el código:
http://www.busqueda-por-codigos-post...es-espa%C3%B1a
http://www.busqueda-por-codigos-post...postales-radio


Relacionas el objeto que se vende con el lugar de venta, claro.

Pero si consigues los datos de lugares, cógidos postales, latitud y longitud por otra vía (y creo que podrás), la distancia puedes obtenerla a partir de longitud y latitud con funciones mysql como esta:
http://www.tufuncion.com/distancia-coordenadas. Seguro que encuentras muchas más en la red.
En ese sentido sí es en parte cosa de base de datos...

La base podrás encontrarla en lugares como este:https://dl.dropboxusercontent.com/u/...osdeespana.sql
que he visto aquí
http://www.durky.com/sql-de-poblacio...c-digo-postal/

aunque el problema es tener una base actualizada. Seguro que encontrarás más datos. Si algún compañero de Geografía me ofrece los datos desde una fuente de procedencia más oficial, subiré aquí la url.

En el ejemplo que muestras son distancias fijas inferiores a... , pero tendrás que empezar a entender el proceso y luego vendrá lo demás. Como te decía gnzsoloyo, si quieres que se haga sin refrescar, tendrás que usar ajax, pero ese es otro tema.

Última edición por jurena; 24/06/2014 a las 23:26
  #6 (permalink)  
Antiguo 25/06/2014, 04:47
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Consulta un tanto extraña...

Hola Jurena, me has aclarado prácticamente todo, has dado en el clavo. Lo que necesitaba era el link de la función para calcular distancia entre dos puntos de coordenadas: http://www.tufuncion.com/distancia-coordenadas

Ahora ya puedo mostrar los que estén a X distancia de un punto.

No obstante, con lo que tengo es hacer la consulta, que me muestre todos los registros e ir calculando la distancia de todos los registros con php y filtrar sólo los que necesite. Pero creo que eso sería una auténtica locura en cuanto a consumo de recursos el operar con 8000 registros cada vez.

Lo ideal sería que la consulta mysql me devolviera sólo los resultados, u optimizarlo de alguna forma...
  #7 (permalink)  
Antiguo 25/06/2014, 04:51
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Consulta un tanto extraña...

Puedes crear un procedure, que dado dos puntos, te calcule las distancias...

Pero si, es lo mismo. Tendrás q calcularlo cada vez xD
__________________
>> Eleazan's Source
>> @Eleazan
  #8 (permalink)  
Antiguo 25/06/2014, 05:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta un tanto extraña...

Cita:
Iniciado por manolo_manolo Ver Mensaje
Hola Jurena, me has aclarado prácticamente todo, has dado en el clavo. Lo que necesitaba era el link de la función para calcular distancia entre dos puntos de coordenadas: http://www.tufuncion.com/distancia-coordenadas

Ahora ya puedo mostrar los que estén a X distancia de un punto.

No obstante, con lo que tengo es hacer la consulta, que me muestre todos los registros e ir calculando la distancia de todos los registros con php y filtrar sólo los que necesite. Pero creo que eso sería una auténtica locura en cuanto a consumo de recursos el operar con 8000 registros cada vez.

Lo ideal sería que la consulta mysql me devolviera sólo los resultados, u optimizarlo de alguna forma...
Eso ya es otra cosa...
La interacción entre la vista y los datos si es cosas de Ajax o PHP puro, pero si lo que quieres es una consulta masiva que te devuelva la distancia entre dos pares de coordenadas geográficas, cuyos valores están en una tabla de la base, eso es más sencillo de hacer. Aunque para ello deberás crear una stored function que se invoque directamente en la consulta.
Te recomiendo la SF y no una simple query, porque la sintaxis es algo complicada. Puedes verla en las FAQs de MySQL, porque este tema ya se ha tratado antes alli... varias veces.
¿Cómo calculo la distancia entre dos puntos geográficos (Lat/Long)?
Ahora bien, debes tener muy en cuenta que los cuatro parámetros de la SF deben ser si o si tipos de dato de punto flotante, con signo y según el estandar usado por ejemplo en Google Maps.
Con eso solo esa SF te devolverá la distancia directa en Km.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 25/06/2014, 05:44
 
Fecha de Ingreso: octubre-2008
Ubicación: Alicante
Mensajes: 337
Antigüedad: 15 años, 6 meses
Puntos: 9
Respuesta: Consulta un tanto extraña...

Gracias nuevamente por tu ayuda jurena, buscando y rebuscando, ya en el tercer día he encontrado una forma de hacer la consulta que efectivamente, calcula la distancia entre dos puntos en la misma consulta y filtra sólo los que estén a más o menos kilómetros de los que le indiques.

Consulta:
Código MySQL:
Ver original
  1. SELECT provincia , ( 6371 * ACOS( COS( RADIANS( 38.341688 ) ) * COS( RADIANS( x ) ) * COS( RADIANS( y ) - RADIANS( - 0.5950556 ) ) + SIN( RADIANS( 38.341688 ) ) * SIN( RADIANS( x ) ) ) ) AS distancia
  2. FROM provincias
  3. HAVING distancia <=10 /* 10 KM a la redonda */
  4. ORDER BY distancia ASC

Aquí es donde lo encontré: http://www.michael-pratt.com/blog/7/...n-MySQL-y-PHP/

Además puedes decirle un área especifica donde buscar, para que no opere con todos los registros de golpe. Ojalá sirva a más gente.

Mil y una gracias de nuevo!!!!
  #10 (permalink)  
Antiguo 25/06/2014, 07:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta un tanto extraña...

Estupendo, manolo_manolo, y gracias por el enlace, pero yo te insistiría en que revisaras el post del que habla gnzsoloyo y contemplaras las recomendación de usar una función o un proceso almacenado, al menos probarlo.
Añado algo: me ha llamado la atención esto del texto del enlace que manolo_manolo nos ha proporcionado:
Extensiones espaciales de MySQL

Cita:
Aprovechando que estamos usando MySQL, debo mencionar que hay una extension que nos permite encontrar lugares cercanos de una forma eficaz y sencilla.

En términos generales solo hay que crear una tabla con capacidades espaciales, las columnas lat y lng deben ser del tipo POINT y deben tener un indice SPATIAL. Luego hay que usar la función MBRContains.
Pido a nuestro moderador que recupere el hilo para el foro MySQL puesto que la solución final se hizo con consulta a la base, aunque si usas lo que hay en el enlace que recomiendas, la cosa se queda entre MySQL y PHP.

Última edición por jurena; 25/06/2014 a las 13:48

Etiquetas: campo, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:45.