Foros del Web » Programando para Internet » PHP »

Ordenar distancias de menor a mayor...

Estas en el tema de Ordenar distancias de menor a mayor... en el foro de PHP en Foros del Web. Hola. A ver si consigo explicar bien lo que me gustaría conseguir. Antes de nada, tengo una tabla llamada articulos y dentro de ella dos ...
  #1 (permalink)  
Antiguo 31/01/2012, 13:39
 
Fecha de Ingreso: junio-2003
Mensajes: 104
Antigüedad: 20 años, 10 meses
Puntos: 0
Pregunta Ordenar distancias de menor a mayor...

Hola.

A ver si consigo explicar bien lo que me gustaría conseguir.

Antes de nada, tengo una tabla llamada articulos y dentro de ella dos columnas, una llamada titulo y otra llamada coordenadas.

De tal modo que puedo tener los siguientes registros (son burdos ejemplos):

Cita:
----- articulos -------
titulo ----- coordenadas
Madrid ----- 111111,111111
Barcelona ----- 222222,222222
Valencia ------ 333333,333333
Canarias ------ 4444444,444444
Bilbao ------ 555555,555555
Sevilla ------ 666666,666666
Si por ejemplo, estoy viendo la sección Madrid, para separar sus coordenadas en latitud y longitud hago lo siguiente:

Código PHP:
$query "SELECT coordenadas from articulos where url = '$url'";
$result = @mysql_query($query);
while (
$row mysql_fetch_assoc($result)) {
$coordenadas $row['coordenadas'];
$coordenada1 explode(","$coordenadas);
$latitud1 $coordenada1[0];
$longitud1 $coordenada1[1];

Con eso lo que hago es separar las coordenadas de Madrid y tener por un lado

$latitud1 = 111111
$longitud1 = 111111

Al separar la longitud y la longitud de Madrid, luego hago otra consulta para calcular las distancias al resto de ciudades:

Código PHP:
$consulta mysql_query("SELECT titulo, coordenadas FROM articulos ORDER BY titulo ASC");
while(
$row mysql_fetch_array($consulta)){
$coordenadas $row['coordenadas'];
$coordenada2 explode(","$coordenadas);
$latitud2 $coordenada2[0];
$longitud2 $coordenada2[1];
$distancia = (3958*3.1415926*sqrt(($latitud2-$latitud1)*($latitud2-$latitud1) + cos($latitud2/57.29578)*cos($latitud1/57.29578)*($longitud2-$longitud1)*($longitud2-$longitud1))/180)*1.609344;
$kilometros number_format(($distancia),2,".",",");
echo 
"$row[titulo] a $kilometros km";

Con todo esto me funciona perfectamente y me da obviamente los resultados ordenados por su título (son ejemplos inventados):

Cita:
Barcelona a 534 km
Bilbao a 463 km
Canarias a 1693 km
Sevilla a 906 km
Valencia a 315 km
Y esta es mi pregunta, ¿cómo puedo hacer para que me muestre los resultados ordenados de menor distancia a mayor distancia? Es decir:

Cita:
Valencia a 315 km
Bilbao a 463 km
Barcelona a 534 km
Sevilla a 906 km
Canarias a 1693 km
Espero que se haya entendido.

Gracias de antemano a cualquiera que me pueda ayudar.

Un saludo!

PD: no sabía si meterlo en PHP o en MySQL, así que si hay que mover el hilo al foro adecuado... adelante!

Última edición por PYTUFYN; 01/02/2012 a las 02:58
  #2 (permalink)  
Antiguo 04/02/2012, 10:31
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Ordenar distancias de menor a mayor...

Respuesta: se puede, ordenas el array u ordenas la consulta. Es esa la pregunta??
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 04/02/2012, 11:10
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Ordenar distancias de menor a mayor...

Ya tienes lo más difícil. Si vas aguardar en BD, puedes ordenar por mysql, si no, simplemente metiendo en un array:

$distancias['Barcelona']=534;
$distancias['Bilbao']=463;
$distancias['Canarias']=1693;
$distancias['Sevilla']=906;

asort($distancias);

Etiquetas: mysql, registro, tabla
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 21:50.